<!DOCTYPE html><html><head>
      <title>README</title>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      
      <link rel="stylesheet" href="file:///c:\Users\Chend\.vscode\extensions\shd101wyy.markdown-preview-enhanced-0.5.22\node_modules\@shd101wyy\mume\dependencies\katex\katex.min.css">
      
      
      
      
      
      
      
      
      
      <style>
      /**
 * prism.js Github theme based on GitHub's theme.
 * @author Sam Clarke
 */
code[class*="language-"],
pre[class*="language-"] {
  color: #333;
  background: none;
  font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
  text-align: left;
  white-space: pre;
  word-spacing: normal;
  word-break: normal;
  word-wrap: normal;
  line-height: 1.4;

  -moz-tab-size: 8;
  -o-tab-size: 8;
  tab-size: 8;

  -webkit-hyphens: none;
  -moz-hyphens: none;
  -ms-hyphens: none;
  hyphens: none;
}

/* Code blocks */
pre[class*="language-"] {
  padding: .8em;
  overflow: auto;
  /* border: 1px solid #ddd; */
  border-radius: 3px;
  /* background: #fff; */
  background: #f5f5f5;
}

/* Inline code */
:not(pre) > code[class*="language-"] {
  padding: .1em;
  border-radius: .3em;
  white-space: normal;
  background: #f5f5f5;
}

.token.comment,
.token.blockquote {
  color: #969896;
}

.token.cdata {
  color: #183691;
}

.token.doctype,
.token.punctuation,
.token.variable,
.token.macro.property {
  color: #333;
}

.token.operator,
.token.important,
.token.keyword,
.token.rule,
.token.builtin {
  color: #a71d5d;
}

.token.string,
.token.url,
.token.regex,
.token.attr-value {
  color: #183691;
}

.token.property,
.token.number,
.token.boolean,
.token.entity,
.token.atrule,
.token.constant,
.token.symbol,
.token.command,
.token.code {
  color: #0086b3;
}

.token.tag,
.token.selector,
.token.prolog {
  color: #63a35c;
}

.token.function,
.token.namespace,
.token.pseudo-element,
.token.class,
.token.class-name,
.token.pseudo-class,
.token.id,
.token.url-reference .token.variable,
.token.attr-name {
  color: #795da3;
}

.token.entity {
  cursor: help;
}

.token.title,
.token.title .token.punctuation {
  font-weight: bold;
  color: #1d3e81;
}

.token.list {
  color: #ed6a43;
}

.token.inserted {
  background-color: #eaffea;
  color: #55a532;
}

.token.deleted {
  background-color: #ffecec;
  color: #bd2c00;
}

.token.bold {
  font-weight: bold;
}

.token.italic {
  font-style: italic;
}


/* JSON */
.language-json .token.property {
  color: #183691;
}

.language-markup .token.tag .token.punctuation {
  color: #333;
}

/* CSS */
code.language-css,
.language-css .token.function {
  color: #0086b3;
}

/* YAML */
.language-yaml .token.atrule {
  color: #63a35c;
}

code.language-yaml {
  color: #183691;
}

/* Ruby */
.language-ruby .token.function {
  color: #333;
}

/* Markdown */
.language-markdown .token.url {
  color: #795da3;
}

/* Makefile */
.language-makefile .token.symbol {
  color: #795da3;
}

.language-makefile .token.variable {
  color: #183691;
}

.language-makefile .token.builtin {
  color: #0086b3;
}

/* Bash */
.language-bash .token.keyword {
  color: #0086b3;
}

/* highlight */
pre[data-line] {
  position: relative;
  padding: 1em 0 1em 3em;
}
pre[data-line] .line-highlight-wrapper {
  position: absolute;
  top: 0;
  left: 0;
  background-color: transparent;
  display: block;
  width: 100%;
}

pre[data-line] .line-highlight {
  position: absolute;
  left: 0;
  right: 0;
  padding: inherit 0;
  margin-top: 1em;
  background: hsla(24, 20%, 50%,.08);
  background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
  pointer-events: none;
  line-height: inherit;
  white-space: pre;
}

pre[data-line] .line-highlight:before, 
pre[data-line] .line-highlight[data-end]:after {
  content: attr(data-start);
  position: absolute;
  top: .4em;
  left: .6em;
  min-width: 1em;
  padding: 0 .5em;
  background-color: hsla(24, 20%, 50%,.4);
  color: hsl(24, 20%, 95%);
  font: bold 65%/1.5 sans-serif;
  text-align: center;
  vertical-align: .3em;
  border-radius: 999px;
  text-shadow: none;
  box-shadow: 0 1px white;
}

pre[data-line] .line-highlight[data-end]:after {
  content: attr(data-end);
  top: auto;
  bottom: .4em;
}html body{font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body>:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body>p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body>ul,html body>ol{margin-bottom:16px}html body ul,html body ol{padding-left:2em}html body ul.no-list,html body ol.no-list{padding:0;list-style-type:none}html body ul ul,html body ul ol,html body ol ol,html body ol ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li>p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;background-color:#f0f0f0;border-left:4px solid #d6d6d6}html body blockquote>:first-child{margin-top:0}html body blockquote>:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:bold;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:bold}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em !important;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::before,html body code::after{letter-spacing:-0.2em;content:"\00a0"}html body pre>code{padding:0;margin:0;font-size:.85em !important;word-break:normal;white-space:pre;background:transparent;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;font-size:.85em !important;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:before,html body pre tt:before,html body pre code:after,html body pre tt:after{content:normal}html body p,html body blockquote,html body ul,html body ol,html body dl,html body pre{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body pre,html body code{word-wrap:break-word;white-space:pre}}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers>code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for="preview"]) .code-chunk .btn-group{display:none}.markdown-preview:not([for="preview"]) .code-chunk .status{display:none}.markdown-preview:not([for="preview"]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
html body:before {
  content: "Failed to compile `style.less`. ParseError: Unrecognised input. Possibly missing opening '{' in input on line 11, column 1:
10 
11 }
12 
" !important;
  padding: 2em !important;
}
.mume.mume { display: none !important; }
      </style>
    </head>
    <body for="html-export">
      <div class="mume markdown-preview  ">
      <div align="center">
&#x1F4D6; Github
&#x2003;&#x2003; | &#x2003;&#x2003;
<a href="https://interview.huihut.com">&#x1F4DA; Docsify</a>
</div> 
<br>
<div align="center">
&#x7B80;&#x4F53;&#x4E2D;&#x6587;
&#x2003;&#x2003; | &#x2003;&#x2003;
<a href="https://github.com/huihut/interview/blob/master/README_en.md">English</a>
</div> 
<br>
<p><b></b></p><details><summary><b>&#x1F4A1; &#x5173;&#x4E8E;</b></summary><p></p>
<p>&#x1F4DA; &#x672C;&#x4ED3;&#x5E93;&#x662F;&#x9762;&#x5411; C/C++ &#x6280;&#x672F;&#x65B9;&#x5411;&#x6821;&#x62DB;&#x6C42;&#x804C;&#x8005;&#x3001;&#x521D;&#x5B66;&#x8005;&#x7684;&#x57FA;&#x7840;&#x77E5;&#x8BC6;&#x603B;&#x7ED3;&#xFF0C;&#x5305;&#x62EC;&#x8BED;&#x8A00;&#x3001;&#x7A0B;&#x5E8F;&#x5E93;&#x3001;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x3001;&#x7B97;&#x6CD5;&#x3001;&#x7CFB;&#x7EDF;&#x3001;&#x7F51;&#x7EDC;&#x3001;&#x94FE;&#x63A5;&#x88C5;&#x8F7D;&#x5E93;&#x7B49;&#x77E5;&#x8BC6;&#x53CA;&#x9762;&#x8BD5;&#x7ECF;&#x9A8C;&#x3001;&#x62DB;&#x8058;&#x3001;&#x5185;&#x63A8;&#x7B49;&#x4FE1;&#x606F;&#x3002;</p>
<p>&#x1F4A1; &#x4FA7;&#x8FB9;&#x76EE;&#x5F55;&#x652F;&#x6301;&#x65B9;&#x5F0F;&#xFF1A;<a href="https://interview.huihut.com">&#x1F4DA; Docsify &#x6587;&#x6863;</a>&#x3001;<a href="https://github.com/jawil/GayHub">Github + TOC &#x5BFC;&#x822A;</a>&#xFF08;<a href="https://gitee.com/huihut/interview/raw/master/images/TOC%E9%A2%84%E8%A7%88.png">TOC&#x9884;&#x89C8;.png</a>&#xFF09;</p>
<p>&#x1F4C4; &#x4FDD;&#x5B58;&#x4E3A; PDF &#x65B9;&#x5F0F;&#xFF1A;&#x4F7F;&#x7528; Chrome &#x6D4F;&#x89C8;&#x5668;&#x6253;&#x5F00; <a href="https://interview.huihut.com">&#x1F4DA; Docsify &#x6587;&#x6863;</a> &#x9875;&#x9762;&#xFF0C;&#x7F29;&#x8D77;&#x5DE6;&#x4FA7;&#x76EE;&#x5F55;-&#x53F3;&#x952E; - &#x6253;&#x5370; - &#x9009;&#x62E9;&#x76EE;&#x6807;&#x6253;&#x5370;&#x673A;&#x662F;&#x53E6;&#x5B58;&#x4E3A;PDF - &#x4FDD;&#x5B58;&#xFF08;<a href="https://gitee.com/huihut/interview/raw/master/images/%E6%89%93%E5%8D%B0%E9%A2%84%E8%A7%88.png">&#x6253;&#x5370;&#x9884;&#x89C8;.png</a>&#xFF09;</p>
<p>&#x1F64F; &#x4ED3;&#x5E93;&#x5185;&#x5BB9;&#x5982;&#x6709;&#x9519;&#x8BEF;&#x6216;&#x6539;&#x8FDB;&#x6B22;&#x8FCE; issue &#x6216; pr&#xFF0C;&#x5EFA;&#x8BAE;&#x6216;&#x8BA8;&#x8BBA;&#x53EF;&#x5728; <a href="https://github.com/huihut/interview/issues/12">#12</a> &#x63D0;&#x51FA;&#x3002;&#x7531;&#x4E8E;&#x672C;&#x4EBA;&#x6C34;&#x5E73;&#x6709;&#x9650;&#xFF0C;&#x4ED3;&#x5E93;&#x4E2D;&#x7684;&#x77E5;&#x8BC6;&#x70B9;&#x6709;&#x6765;&#x81EA;&#x672C;&#x4EBA;&#x539F;&#x521B;&#x3001;&#x8BFB;&#x4E66;&#x7B14;&#x8BB0;&#x3001;&#x4E66;&#x7C4D;&#x3001;&#x535A;&#x6587;&#x7B49;&#xFF0C;&#x975E;&#x539F;&#x521B;&#x5747;&#x5DF2;&#x6807;&#x660E;&#x51FA;&#x5904;&#xFF0C;&#x5982;&#x6709;&#x9057;&#x6F0F;&#xFF0C;&#x8BF7; issue &#x63D0;&#x51FA;&#x3002;&#x672C;&#x4ED3;&#x5E93;&#x9075;&#x5FAA; <a href="https://github.com/huihut/interview/blob/master/LICENSE">CC BY-NC-SA 4.0&#xFF08;&#x7F72;&#x540D; - &#x975E;&#x5546;&#x4E1A;&#x6027;&#x4F7F;&#x7528; - &#x76F8;&#x540C;&#x65B9;&#x5F0F;&#x5171;&#x4EAB;&#xFF09;</a> &#x534F;&#x8BAE;&#xFF0C;&#x8F6C;&#x8F7D;&#x8BF7;&#x6CE8;&#x660E;&#x51FA;&#x5904;&#xFF0C;&#x4E0D;&#x5F97;&#x7528;&#x4E8E;&#x5546;&#x4E1A;&#x76EE;&#x7684;&#x3002;</p>
</details>
<h2 class="mume-header" id="%E7%9B%AE%E5%BD%95">&#x1F4D1; &#x76EE;&#x5F55;</h2>

<ul>
<li><a href="#cc">&#x2795; C/C++</a></li>
<li><a href="#effective">&#x2B50;&#xFE0F; Effective</a></li>
<li><a href="#stl">&#x1F4E6; STL</a></li>
<li><a href="#data-structure">&#x303D;&#xFE0F; &#x6570;&#x636E;&#x7ED3;&#x6784;</a></li>
<li><a href="#algorithm">&#x26A1;&#xFE0F; &#x7B97;&#x6CD5;</a></li>
<li><a href="#problems">&#x2753; Problems</a></li>
<li><a href="#os">&#x1F4BB; &#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;</a></li>
<li><a href="#computer-network">&#x2601;&#xFE0F; &#x8BA1;&#x7B97;&#x673A;&#x7F51;&#x7EDC;</a></li>
<li><a href="#network-programming">&#x1F329; &#x7F51;&#x7EDC;&#x7F16;&#x7A0B;</a></li>
<li><a href="#database">&#x1F4BE; &#x6570;&#x636E;&#x5E93;</a></li>
<li><a href="#design-pattern">&#x1F4CF; &#x8BBE;&#x8BA1;&#x6A21;&#x5F0F;</a></li>
<li><a href="#link-loading-library">&#x2699;&#xFE0F; &#x94FE;&#x63A5;&#x88C5;&#x8F7D;&#x5E93;</a></li>
<li><a href="#books">&#x1F4DA; &#x4E66;&#x7C4D;</a></li>
<li><a href="#cc-development-direction">&#x1F531; C/C++ &#x53D1;&#x5C55;&#x65B9;&#x5411;</a></li>
<li><a href="#review-of-brush-questions-website">&#x1F4AF; &#x590D;&#x4E60;&#x5237;&#x9898;&#x7F51;&#x7AD9;</a></li>
<li><a href="#interview-questions-experience">&#x1F4DD; &#x9762;&#x8BD5;&#x9898;&#x76EE;&#x7ECF;&#x9A8C;</a></li>
<li><a href="#recruitment-time-post">&#x1F4C6; &#x62DB;&#x8058;&#x65F6;&#x95F4;&#x5C97;&#x4F4D;</a></li>
<li><a href="#recommend">&#x1F44D; &#x5185;&#x63A8;</a></li>
<li><a href="#contributor">&#x1F46C; &#x8D21;&#x732E;&#x8005;</a></li>
<li><a href="#support-sponsor">&#x1F36D; &#x652F;&#x6301;&#x8D5E;&#x52A9;</a></li>
<li><a href="#license">&#x1F4DC; License</a></li>
</ul>
<p><a id="cc" href></a></p>
<h2 class="mume-header" id="cc">&#x2795; C/C++</h2>

<h3 class="mume-header" id="const">const</h3>

<h4 class="mume-header" id="%E4%BD%9C%E7%94%A8">&#x4F5C;&#x7528;</h4>

<ol>
<li>&#x4FEE;&#x9970;&#x53D8;&#x91CF;&#xFF0C;&#x8BF4;&#x660E;&#x8BE5;&#x53D8;&#x91CF;&#x4E0D;&#x53EF;&#x4EE5;&#x88AB;&#x6539;&#x53D8;&#xFF1B;</li>
<li>&#x4FEE;&#x9970;&#x6307;&#x9488;&#xFF0C;&#x5206;&#x4E3A;&#x6307;&#x5411;&#x5E38;&#x91CF;&#x7684;&#x6307;&#x9488;&#xFF08;pointer to const&#xFF09;&#x548C;&#x81EA;&#x8EAB;&#x662F;&#x5E38;&#x91CF;&#x7684;&#x6307;&#x9488;&#xFF08;&#x5E38;&#x91CF;&#x6307;&#x9488;&#xFF0C;const pointer&#xFF09;&#xFF1B;</li>
<li>&#x4FEE;&#x9970;&#x5F15;&#x7528;&#xFF0C;&#x6307;&#x5411;&#x5E38;&#x91CF;&#x7684;&#x5F15;&#x7528;&#xFF08;reference to const&#xFF09;&#xFF0C;&#x7528;&#x4E8E;&#x5F62;&#x53C2;&#x7C7B;&#x578B;&#xFF0C;&#x5373;&#x907F;&#x514D;&#x4E86;&#x62F7;&#x8D1D;&#xFF0C;&#x53C8;&#x907F;&#x514D;&#x4E86;&#x51FD;&#x6570;&#x5BF9;&#x503C;&#x7684;&#x4FEE;&#x6539;&#xFF1B;</li>
<li>&#x4FEE;&#x9970;&#x6210;&#x5458;&#x51FD;&#x6570;&#xFF0C;&#x8BF4;&#x660E;&#x8BE5;&#x6210;&#x5458;&#x51FD;&#x6570;&#x5185;&#x4E0D;&#x80FD;&#x4FEE;&#x6539;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x3002;</li>
</ol>
<h4 class="mume-header" id="const-%E7%9A%84%E6%8C%87%E9%92%88%E4%B8%8E%E5%BC%95%E7%94%A8">const &#x7684;&#x6307;&#x9488;&#x4E0E;&#x5F15;&#x7528;</h4>

<ul>
<li>&#x6307;&#x9488;
<ul>
<li>&#x6307;&#x5411;&#x5E38;&#x91CF;&#x7684;&#x6307;&#x9488;&#xFF08;pointer to const&#xFF09;</li>
<li>&#x81EA;&#x8EAB;&#x662F;&#x5E38;&#x91CF;&#x7684;&#x6307;&#x9488;&#xFF08;&#x5E38;&#x91CF;&#x6307;&#x9488;&#xFF0C;const pointer&#xFF09;</li>
</ul>
</li>
<li>&#x5F15;&#x7528;
<ul>
<li>&#x6307;&#x5411;&#x5E38;&#x91CF;&#x7684;&#x5F15;&#x7528;&#xFF08;reference to const&#xFF09;</li>
<li>&#x6CA1;&#x6709; const reference&#xFF0C;&#x56E0;&#x4E3A;&#x5F15;&#x7528;&#x53EA;&#x662F;&#x5BF9;&#x8C61;&#x7684;&#x522B;&#x540D;&#xFF0C;&#x5F15;&#x7528;&#x4E0D;&#x662F;&#x5BF9;&#x8C61;&#xFF0C;&#x4E0D;&#x80FD;&#x7528; const &#x4FEE;&#x9970;</li>
</ul>
</li>
</ul>
<blockquote>
<p>&#xFF08;&#x4E3A;&#x4E86;&#x65B9;&#x4FBF;&#x8BB0;&#x5FC6;&#x53EF;&#x4EE5;&#x60F3;&#x6210;&#xFF09;&#x88AB; const &#x4FEE;&#x9970;&#xFF08;&#x5728; const &#x540E;&#x9762;&#xFF09;&#x7684;&#x503C;&#x4E0D;&#x53EF;&#x6539;&#x53D8;&#xFF0C;&#x5982;&#x4E0B;&#x6587;&#x4F7F;&#x7528;&#x4F8B;&#x5B50;&#x4E2D;&#x7684; <code>p2</code>&#x3001;<code>p3</code></p>
</blockquote>
<h4 class="mume-header" id="%E4%BD%BF%E7%94%A8">&#x4F7F;&#x7528;</h4>

<p>const &#x4F7F;&#x7528;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token comment">// &#x7C7B;</span>
<span class="token keyword">class</span> <span class="token class-name">A</span>
<span class="token punctuation">{</span>
<span class="token keyword">private</span><span class="token operator">:</span>
    <span class="token keyword">const</span> <span class="token keyword">int</span> a<span class="token punctuation">;</span>                <span class="token comment">// &#x5E38;&#x5BF9;&#x8C61;&#x6210;&#x5458;&#xFF0C;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x521D;&#x59CB;&#x5316;&#x5217;&#x8868;&#x6216;&#x8005;&#x7C7B;&#x5185;&#x521D;&#x59CB;&#x5316;</span>

<span class="token keyword">public</span><span class="token operator">:</span>
    <span class="token comment">// &#x6784;&#x9020;&#x51FD;&#x6570;</span>
    <span class="token function">A</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">:</span> <span class="token function">a</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span><span class="token punctuation">;</span>
    <span class="token function">A</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">)</span> <span class="token operator">:</span> <span class="token function">a</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span><span class="token punctuation">;</span>        <span class="token comment">// &#x521D;&#x59CB;&#x5316;&#x5217;&#x8868;</span>

    <span class="token comment">// const&#x53EF;&#x7528;&#x4E8E;&#x5BF9;&#x91CD;&#x8F7D;&#x51FD;&#x6570;&#x7684;&#x533A;&#x5206;</span>
    <span class="token keyword">int</span> <span class="token function">getValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>             <span class="token comment">// &#x666E;&#x901A;&#x6210;&#x5458;&#x51FD;&#x6570;</span>
    <span class="token keyword">int</span> <span class="token function">getValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">const</span><span class="token punctuation">;</span>       <span class="token comment">// &#x5E38;&#x6210;&#x5458;&#x51FD;&#x6570;&#xFF0C;&#x4E0D;&#x5F97;&#x4FEE;&#x6539;&#x7C7B;&#x4E2D;&#x7684;&#x4EFB;&#x4F55;&#x6570;&#x636E;&#x6210;&#x5458;&#x7684;&#x503C;</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>

<span class="token keyword">void</span> <span class="token function">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    <span class="token comment">// &#x5BF9;&#x8C61;</span>
    A b<span class="token punctuation">;</span>                        <span class="token comment">// &#x666E;&#x901A;&#x5BF9;&#x8C61;&#xFF0C;&#x53EF;&#x4EE5;&#x8C03;&#x7528;&#x5168;&#x90E8;&#x6210;&#x5458;&#x51FD;&#x6570;</span>
    <span class="token keyword">const</span> A a<span class="token punctuation">;</span>                  <span class="token comment">// &#x5E38;&#x5BF9;&#x8C61;&#xFF0C;&#x53EA;&#x80FD;&#x8C03;&#x7528;&#x5E38;&#x6210;&#x5458;&#x51FD;&#x6570;</span>
    <span class="token keyword">const</span> A <span class="token operator">*</span>p <span class="token operator">=</span> <span class="token operator">&amp;</span>a<span class="token punctuation">;</span>            <span class="token comment">// &#x6307;&#x9488;&#x53D8;&#x91CF;&#xFF0C;&#x6307;&#x5411;&#x5E38;&#x5BF9;&#x8C61;</span>
    <span class="token keyword">const</span> A <span class="token operator">&amp;</span>q <span class="token operator">=</span> a<span class="token punctuation">;</span>             <span class="token comment">// &#x6307;&#x5411;&#x5E38;&#x5BF9;&#x8C61;&#x7684;&#x5F15;&#x7528;</span>

    <span class="token comment">// &#x6307;&#x9488;</span>
    <span class="token keyword">char</span> greeting<span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string">&quot;Hello&quot;</span><span class="token punctuation">;</span>
    <span class="token keyword">char</span><span class="token operator">*</span> p1 <span class="token operator">=</span> greeting<span class="token punctuation">;</span>                <span class="token comment">// &#x6307;&#x9488;&#x53D8;&#x91CF;&#xFF0C;&#x6307;&#x5411;&#x5B57;&#x7B26;&#x6570;&#x7EC4;&#x53D8;&#x91CF;</span>
    <span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span> p2 <span class="token operator">=</span> greeting<span class="token punctuation">;</span>          <span class="token comment">// &#x6307;&#x9488;&#x53D8;&#x91CF;&#xFF0C;&#x6307;&#x5411;&#x5B57;&#x7B26;&#x6570;&#x7EC4;&#x5E38;&#x91CF;&#xFF08;const &#x540E;&#x9762;&#x662F; char&#xFF0C;&#x8BF4;&#x660E;&#x6307;&#x5411;&#x7684;&#x5B57;&#x7B26;&#xFF08;char&#xFF09;&#x4E0D;&#x53EF;&#x6539;&#x53D8;&#xFF09;</span>
    <span class="token keyword">char</span><span class="token operator">*</span> <span class="token keyword">const</span> p3 <span class="token operator">=</span> greeting<span class="token punctuation">;</span>          <span class="token comment">// &#x81EA;&#x8EAB;&#x662F;&#x5E38;&#x91CF;&#x7684;&#x6307;&#x9488;&#xFF0C;&#x6307;&#x5411;&#x5B57;&#x7B26;&#x6570;&#x7EC4;&#x53D8;&#x91CF;&#xFF08;const &#x540E;&#x9762;&#x662F; p3&#xFF0C;&#x8BF4;&#x660E; p3 &#x6307;&#x9488;&#x81EA;&#x8EAB;&#x4E0D;&#x53EF;&#x6539;&#x53D8;&#xFF09;</span>
    <span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span> <span class="token keyword">const</span> p4 <span class="token operator">=</span> greeting<span class="token punctuation">;</span>    <span class="token comment">// &#x81EA;&#x8EAB;&#x662F;&#x5E38;&#x91CF;&#x7684;&#x6307;&#x9488;&#xFF0C;&#x6307;&#x5411;&#x5B57;&#x7B26;&#x6570;&#x7EC4;&#x5E38;&#x91CF;</span>
<span class="token punctuation">}</span>

<span class="token comment">// &#x51FD;&#x6570;</span>
<span class="token keyword">void</span> <span class="token function">function1</span><span class="token punctuation">(</span><span class="token keyword">const</span> <span class="token keyword">int</span> Var<span class="token punctuation">)</span><span class="token punctuation">;</span>           <span class="token comment">// &#x4F20;&#x9012;&#x8FC7;&#x6765;&#x7684;&#x53C2;&#x6570;&#x5728;&#x51FD;&#x6570;&#x5185;&#x4E0D;&#x53EF;&#x53D8;</span>
<span class="token keyword">void</span> <span class="token function">function2</span><span class="token punctuation">(</span><span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span> Var<span class="token punctuation">)</span><span class="token punctuation">;</span>         <span class="token comment">// &#x53C2;&#x6570;&#x6307;&#x9488;&#x6240;&#x6307;&#x5185;&#x5BB9;&#x4E3A;&#x5E38;&#x91CF;</span>
<span class="token keyword">void</span> <span class="token function">function3</span><span class="token punctuation">(</span><span class="token keyword">char</span><span class="token operator">*</span> <span class="token keyword">const</span> Var<span class="token punctuation">)</span><span class="token punctuation">;</span>         <span class="token comment">// &#x53C2;&#x6570;&#x6307;&#x9488;&#x4E3A;&#x5E38;&#x91CF;</span>
<span class="token keyword">void</span> <span class="token function">function4</span><span class="token punctuation">(</span><span class="token keyword">const</span> <span class="token keyword">int</span><span class="token operator">&amp;</span> Var<span class="token punctuation">)</span><span class="token punctuation">;</span>          <span class="token comment">// &#x5F15;&#x7528;&#x53C2;&#x6570;&#x5728;&#x51FD;&#x6570;&#x5185;&#x4E3A;&#x5E38;&#x91CF;</span>

<span class="token comment">// &#x51FD;&#x6570;&#x8FD4;&#x56DE;&#x503C;</span>
<span class="token keyword">const</span> <span class="token keyword">int</span> <span class="token function">function5</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>      <span class="token comment">// &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x5E38;&#x6570;</span>
<span class="token keyword">const</span> <span class="token keyword">int</span><span class="token operator">*</span> <span class="token function">function6</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>     <span class="token comment">// &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x6307;&#x5411;&#x5E38;&#x91CF;&#x7684;&#x6307;&#x9488;&#x53D8;&#x91CF;&#xFF0C;&#x4F7F;&#x7528;&#xFF1A;const int *p = function6();</span>
<span class="token keyword">int</span><span class="token operator">*</span> <span class="token keyword">const</span> <span class="token function">function7</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>     <span class="token comment">// &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x6307;&#x5411;&#x53D8;&#x91CF;&#x7684;&#x5E38;&#x6307;&#x9488;&#xFF0C;&#x4F7F;&#x7528;&#xFF1A;int* const p = function7();</span>
</pre><h3 class="mume-header" id="static">static</h3>

<h4 class="mume-header" id="%E4%BD%9C%E7%94%A8-1">&#x4F5C;&#x7528;</h4>

<ol>
<li>&#x4FEE;&#x9970;&#x666E;&#x901A;&#x53D8;&#x91CF;&#xFF0C;&#x4FEE;&#x6539;&#x53D8;&#x91CF;&#x7684;&#x5B58;&#x50A8;&#x533A;&#x57DF;&#x548C;&#x751F;&#x547D;&#x5468;&#x671F;&#xFF0C;&#x4F7F;&#x53D8;&#x91CF;&#x5B58;&#x50A8;&#x5728;&#x9759;&#x6001;&#x533A;&#xFF0C;&#x5728; main &#x51FD;&#x6570;&#x8FD0;&#x884C;&#x524D;&#x5C31;&#x5206;&#x914D;&#x4E86;&#x7A7A;&#x95F4;&#xFF0C;&#x5982;&#x679C;&#x6709;&#x521D;&#x59CB;&#x503C;&#x5C31;&#x7528;&#x521D;&#x59CB;&#x503C;&#x521D;&#x59CB;&#x5316;&#x5B83;&#xFF0C;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x521D;&#x59CB;&#x503C;&#x7CFB;&#x7EDF;&#x7528;&#x9ED8;&#x8BA4;&#x503C;&#x521D;&#x59CB;&#x5316;&#x5B83;&#x3002;</li>
<li>&#x4FEE;&#x9970;&#x666E;&#x901A;&#x51FD;&#x6570;&#xFF0C;&#x8868;&#x660E;&#x51FD;&#x6570;&#x7684;&#x4F5C;&#x7528;&#x8303;&#x56F4;&#xFF0C;&#x4EC5;&#x5728;&#x5B9A;&#x4E49;&#x8BE5;&#x51FD;&#x6570;&#x7684;&#x6587;&#x4EF6;&#x5185;&#x624D;&#x80FD;&#x4F7F;&#x7528;&#x3002;&#x5728;&#x591A;&#x4EBA;&#x5F00;&#x53D1;&#x9879;&#x76EE;&#x65F6;&#xFF0C;&#x4E3A;&#x4E86;&#x9632;&#x6B62;&#x4E0E;&#x4ED6;&#x4EBA;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x91CC;&#x7684;&#x51FD;&#x6570;&#x91CD;&#x540D;&#xFF0C;&#x53EF;&#x4EE5;&#x5C06;&#x51FD;&#x6570;&#x5B9A;&#x4F4D;&#x4E3A; static&#x3002;</li>
<li>&#x4FEE;&#x9970;&#x6210;&#x5458;&#x53D8;&#x91CF;&#xFF0C;&#x4FEE;&#x9970;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x4F7F;&#x6240;&#x6709;&#x7684;&#x5BF9;&#x8C61;&#x53EA;&#x4FDD;&#x5B58;&#x4E00;&#x4E2A;&#x8BE5;&#x53D8;&#x91CF;&#xFF0C;&#x800C;&#x4E14;&#x4E0D;&#x9700;&#x8981;&#x751F;&#x6210;&#x5BF9;&#x8C61;&#x5C31;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x8BE5;&#x6210;&#x5458;&#x3002;</li>
<li>&#x4FEE;&#x9970;&#x6210;&#x5458;&#x51FD;&#x6570;&#xFF0C;&#x4FEE;&#x9970;&#x6210;&#x5458;&#x51FD;&#x6570;&#x4F7F;&#x5F97;&#x4E0D;&#x9700;&#x8981;&#x751F;&#x6210;&#x5BF9;&#x8C61;&#x5C31;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x8BE5;&#x51FD;&#x6570;&#xFF0C;&#x4F46;&#x662F;&#x5728; static &#x51FD;&#x6570;&#x5185;&#x4E0D;&#x80FD;&#x8BBF;&#x95EE;&#x975E;&#x9759;&#x6001;&#x6210;&#x5458;&#x3002;</li>
</ol>
<h3 class="mume-header" id="this-%E6%8C%87%E9%92%88">this &#x6307;&#x9488;</h3>

<ol>
<li><code>this</code> &#x6307;&#x9488;&#x662F;&#x4E00;&#x4E2A;&#x9690;&#x542B;&#x4E8E;&#x6BCF;&#x4E00;&#x4E2A;&#x975E;&#x9759;&#x6001;&#x6210;&#x5458;&#x51FD;&#x6570;&#x4E2D;&#x7684;&#x7279;&#x6B8A;&#x6307;&#x9488;&#x3002;&#x5B83;&#x6307;&#x5411;&#x8C03;&#x7528;&#x8BE5;&#x6210;&#x5458;&#x51FD;&#x6570;&#x7684;&#x90A3;&#x4E2A;&#x5BF9;&#x8C61;&#x3002;</li>
<li>&#x5F53;&#x5BF9;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x8C03;&#x7528;&#x6210;&#x5458;&#x51FD;&#x6570;&#x65F6;&#xFF0C;&#x7F16;&#x8BD1;&#x7A0B;&#x5E8F;&#x5148;&#x5C06;&#x5BF9;&#x8C61;&#x7684;&#x5730;&#x5740;&#x8D4B;&#x7ED9; <code>this</code> &#x6307;&#x9488;&#xFF0C;&#x7136;&#x540E;&#x8C03;&#x7528;&#x6210;&#x5458;&#x51FD;&#x6570;&#xFF0C;&#x6BCF;&#x6B21;&#x6210;&#x5458;&#x51FD;&#x6570;&#x5B58;&#x53D6;&#x6570;&#x636E;&#x6210;&#x5458;&#x65F6;&#xFF0C;&#x90FD;&#x9690;&#x5F0F;&#x4F7F;&#x7528; <code>this</code> &#x6307;&#x9488;&#x3002;</li>
<li>&#x5F53;&#x4E00;&#x4E2A;&#x6210;&#x5458;&#x51FD;&#x6570;&#x88AB;&#x8C03;&#x7528;&#x65F6;&#xFF0C;&#x81EA;&#x52A8;&#x5411;&#x5B83;&#x4F20;&#x9012;&#x4E00;&#x4E2A;&#x9690;&#x542B;&#x7684;&#x53C2;&#x6570;&#xFF0C;&#x8BE5;&#x53C2;&#x6570;&#x662F;&#x4E00;&#x4E2A;&#x6307;&#x5411;&#x8FD9;&#x4E2A;&#x6210;&#x5458;&#x51FD;&#x6570;&#x6240;&#x5728;&#x7684;&#x5BF9;&#x8C61;&#x7684;&#x6307;&#x9488;&#x3002;</li>
<li><code>this</code> &#x6307;&#x9488;&#x88AB;&#x9690;&#x542B;&#x5730;&#x58F0;&#x660E;&#x4E3A;: <code>ClassName *const this</code>&#xFF0C;&#x8FD9;&#x610F;&#x5473;&#x7740;&#x4E0D;&#x80FD;&#x7ED9; <code>this</code> &#x6307;&#x9488;&#x8D4B;&#x503C;&#xFF1B;&#x5728; <code>ClassName</code> &#x7C7B;&#x7684; <code>const</code> &#x6210;&#x5458;&#x51FD;&#x6570;&#x4E2D;&#xFF0C;<code>this</code> &#x6307;&#x9488;&#x7684;&#x7C7B;&#x578B;&#x4E3A;&#xFF1A;<code>const ClassName* const</code>&#xFF0C;&#x8FD9;&#x8BF4;&#x660E;&#x4E0D;&#x80FD;&#x5BF9; <code>this</code> &#x6307;&#x9488;&#x6240;&#x6307;&#x5411;&#x7684;&#x8FD9;&#x79CD;&#x5BF9;&#x8C61;&#x662F;&#x4E0D;&#x53EF;&#x4FEE;&#x6539;&#x7684;&#xFF08;&#x5373;&#x4E0D;&#x80FD;&#x5BF9;&#x8FD9;&#x79CD;&#x5BF9;&#x8C61;&#x7684;&#x6570;&#x636E;&#x6210;&#x5458;&#x8FDB;&#x884C;&#x8D4B;&#x503C;&#x64CD;&#x4F5C;&#xFF09;&#xFF1B;</li>
<li><code>this</code> &#x5E76;&#x4E0D;&#x662F;&#x4E00;&#x4E2A;&#x5E38;&#x89C4;&#x53D8;&#x91CF;&#xFF0C;&#x800C;&#x662F;&#x4E2A;&#x53F3;&#x503C;&#xFF0C;&#x6240;&#x4EE5;&#x4E0D;&#x80FD;&#x53D6;&#x5F97; <code>this</code> &#x7684;&#x5730;&#x5740;&#xFF08;&#x4E0D;&#x80FD; <code>&amp;this</code>&#xFF09;&#x3002;</li>
<li>&#x5728;&#x4EE5;&#x4E0B;&#x573A;&#x666F;&#x4E2D;&#xFF0C;&#x7ECF;&#x5E38;&#x9700;&#x8981;&#x663E;&#x5F0F;&#x5F15;&#x7528; <code>this</code> &#x6307;&#x9488;&#xFF1A;
<ol>
<li>&#x4E3A;&#x5B9E;&#x73B0;&#x5BF9;&#x8C61;&#x7684;&#x94FE;&#x5F0F;&#x5F15;&#x7528;&#xFF1B;</li>
<li>&#x4E3A;&#x907F;&#x514D;&#x5BF9;&#x540C;&#x4E00;&#x5BF9;&#x8C61;&#x8FDB;&#x884C;&#x8D4B;&#x503C;&#x64CD;&#x4F5C;&#xFF1B;</li>
<li>&#x5728;&#x5B9E;&#x73B0;&#x4E00;&#x4E9B;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x65F6;&#xFF0C;&#x5982; <code>list</code>&#x3002;</li>
</ol>
</li>
</ol>
<h3 class="mume-header" id="inline-%E5%86%85%E8%81%94%E5%87%BD%E6%95%B0">inline &#x5185;&#x8054;&#x51FD;&#x6570;</h3>

<h4 class="mume-header" id="%E7%89%B9%E5%BE%81">&#x7279;&#x5F81;</h4>

<ul>
<li>&#x76F8;&#x5F53;&#x4E8E;&#x628A;&#x5185;&#x8054;&#x51FD;&#x6570;&#x91CC;&#x9762;&#x7684;&#x5185;&#x5BB9;&#x5199;&#x5728;&#x8C03;&#x7528;&#x5185;&#x8054;&#x51FD;&#x6570;&#x5904;&#xFF1B;</li>
<li>&#x76F8;&#x5F53;&#x4E8E;&#x4E0D;&#x7528;&#x6267;&#x884C;&#x8FDB;&#x5165;&#x51FD;&#x6570;&#x7684;&#x6B65;&#x9AA4;&#xFF0C;&#x76F4;&#x63A5;&#x6267;&#x884C;&#x51FD;&#x6570;&#x4F53;&#xFF1B;</li>
<li>&#x76F8;&#x5F53;&#x4E8E;&#x5B8F;&#xFF0C;&#x5374;&#x6BD4;&#x5B8F;&#x591A;&#x4E86;&#x7C7B;&#x578B;&#x68C0;&#x67E5;&#xFF0C;&#x771F;&#x6B63;&#x5177;&#x6709;&#x51FD;&#x6570;&#x7279;&#x6027;&#xFF1B;</li>
<li>&#x7F16;&#x8BD1;&#x5668;&#x4E00;&#x822C;&#x4E0D;&#x5185;&#x8054;&#x5305;&#x542B;&#x5FAA;&#x73AF;&#x3001;&#x9012;&#x5F52;&#x3001;switch &#x7B49;&#x590D;&#x6742;&#x64CD;&#x4F5C;&#x7684;&#x5185;&#x8054;&#x51FD;&#x6570;&#xFF1B;</li>
<li>&#x5728;&#x7C7B;&#x58F0;&#x660E;&#x4E2D;&#x5B9A;&#x4E49;&#x7684;&#x51FD;&#x6570;&#xFF0C;&#x9664;&#x4E86;&#x865A;&#x51FD;&#x6570;&#x7684;&#x5176;&#x4ED6;&#x51FD;&#x6570;&#x90FD;&#x4F1A;&#x81EA;&#x52A8;&#x9690;&#x5F0F;&#x5730;&#x5F53;&#x6210;&#x5185;&#x8054;&#x51FD;&#x6570;&#x3002;</li>
</ul>
<h4 class="mume-header" id="%E4%BD%BF%E7%94%A8-1">&#x4F7F;&#x7528;</h4>

<p>inline &#x4F7F;&#x7528;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token comment">// &#x58F0;&#x660E;1&#xFF08;&#x52A0; inline&#xFF0C;&#x5EFA;&#x8BAE;&#x4F7F;&#x7528;&#xFF09;</span>
<span class="token keyword">inline</span> <span class="token keyword">int</span> <span class="token function">functionName</span><span class="token punctuation">(</span><span class="token keyword">int</span> first<span class="token punctuation">,</span> <span class="token keyword">int</span> second<span class="token punctuation">,</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token comment">// &#x58F0;&#x660E;2&#xFF08;&#x4E0D;&#x52A0; inline&#xFF09;</span>
<span class="token keyword">int</span> <span class="token function">functionName</span><span class="token punctuation">(</span><span class="token keyword">int</span> first<span class="token punctuation">,</span> <span class="token keyword">int</span> second<span class="token punctuation">,</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token comment">// &#x5B9A;&#x4E49;</span>
<span class="token keyword">inline</span> <span class="token keyword">int</span> <span class="token function">functionName</span><span class="token punctuation">(</span><span class="token keyword">int</span> first<span class="token punctuation">,</span> <span class="token keyword">int</span> second<span class="token punctuation">,</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token comment">/****/</span><span class="token punctuation">}</span><span class="token punctuation">;</span>

<span class="token comment">// &#x7C7B;&#x5185;&#x5B9A;&#x4E49;&#xFF0C;&#x9690;&#x5F0F;&#x5185;&#x8054;</span>
<span class="token keyword">class</span> <span class="token class-name">A</span> <span class="token punctuation">{</span>
    <span class="token keyword">int</span> <span class="token function">doA</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token punctuation">}</span>         <span class="token comment">// &#x9690;&#x5F0F;&#x5185;&#x8054;</span>
<span class="token punctuation">}</span>

<span class="token comment">// &#x7C7B;&#x5916;&#x5B9A;&#x4E49;&#xFF0C;&#x9700;&#x8981;&#x663E;&#x5F0F;&#x5185;&#x8054;</span>
<span class="token keyword">class</span> <span class="token class-name">A</span> <span class="token punctuation">{</span>
    <span class="token keyword">int</span> <span class="token function">doA</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">inline</span> <span class="token keyword">int</span> <span class="token class-name">A</span><span class="token operator">::</span><span class="token function">doA</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token punctuation">}</span>   <span class="token comment">// &#x9700;&#x8981;&#x663E;&#x5F0F;&#x5185;&#x8054;</span>
</pre><h4 class="mume-header" id="%E7%BC%96%E8%AF%91%E5%99%A8%E5%AF%B9-inline-%E5%87%BD%E6%95%B0%E7%9A%84%E5%A4%84%E7%90%86%E6%AD%A5%E9%AA%A4">&#x7F16;&#x8BD1;&#x5668;&#x5BF9; inline &#x51FD;&#x6570;&#x7684;&#x5904;&#x7406;&#x6B65;&#x9AA4;</h4>

<ol>
<li>&#x5C06; inline &#x51FD;&#x6570;&#x4F53;&#x590D;&#x5236;&#x5230; inline &#x51FD;&#x6570;&#x8C03;&#x7528;&#x70B9;&#x5904;&#xFF1B;</li>
<li>&#x4E3A;&#x6240;&#x7528; inline &#x51FD;&#x6570;&#x4E2D;&#x7684;&#x5C40;&#x90E8;&#x53D8;&#x91CF;&#x5206;&#x914D;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#xFF1B;</li>
<li>&#x5C06; inline &#x51FD;&#x6570;&#x7684;&#x7684;&#x8F93;&#x5165;&#x53C2;&#x6570;&#x548C;&#x8FD4;&#x56DE;&#x503C;&#x6620;&#x5C04;&#x5230;&#x8C03;&#x7528;&#x65B9;&#x6CD5;&#x7684;&#x5C40;&#x90E8;&#x53D8;&#x91CF;&#x7A7A;&#x95F4;&#x4E2D;&#xFF1B;</li>
<li>&#x5982;&#x679C; inline &#x51FD;&#x6570;&#x6709;&#x591A;&#x4E2A;&#x8FD4;&#x56DE;&#x70B9;&#xFF0C;&#x5C06;&#x5176;&#x8F6C;&#x53D8;&#x4E3A; inline &#x51FD;&#x6570;&#x4EE3;&#x7801;&#x5757;&#x672B;&#x5C3E;&#x7684;&#x5206;&#x652F;&#xFF08;&#x4F7F;&#x7528; GOTO&#xFF09;&#x3002;</li>
</ol>
<h4 class="mume-header" id="%E4%BC%98%E7%BC%BA%E7%82%B9">&#x4F18;&#x7F3A;&#x70B9;</h4>

<p>&#x4F18;&#x70B9;</p>
<ol>
<li>&#x5185;&#x8054;&#x51FD;&#x6570;&#x540C;&#x5B8F;&#x51FD;&#x6570;&#x4E00;&#x6837;&#x5C06;&#x5728;&#x88AB;&#x8C03;&#x7528;&#x5904;&#x8FDB;&#x884C;&#x4EE3;&#x7801;&#x5C55;&#x5F00;&#xFF0C;&#x7701;&#x53BB;&#x4E86;&#x53C2;&#x6570;&#x538B;&#x6808;&#x3001;&#x6808;&#x5E27;&#x5F00;&#x8F9F;&#x4E0E;&#x56DE;&#x6536;&#xFF0C;&#x7ED3;&#x679C;&#x8FD4;&#x56DE;&#x7B49;&#xFF0C;&#x4ECE;&#x800C;&#x63D0;&#x9AD8;&#x7A0B;&#x5E8F;&#x8FD0;&#x884C;&#x901F;&#x5EA6;&#x3002;</li>
<li>&#x5185;&#x8054;&#x51FD;&#x6570;&#x76F8;&#x6BD4;&#x5B8F;&#x51FD;&#x6570;&#x6765;&#x8BF4;&#xFF0C;&#x5728;&#x4EE3;&#x7801;&#x5C55;&#x5F00;&#x65F6;&#xFF0C;&#x4F1A;&#x505A;&#x5B89;&#x5168;&#x68C0;&#x67E5;&#x6216;&#x81EA;&#x52A8;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#xFF08;&#x540C;&#x666E;&#x901A;&#x51FD;&#x6570;&#xFF09;&#xFF0C;&#x800C;&#x5B8F;&#x5B9A;&#x4E49;&#x5219;&#x4E0D;&#x4F1A;&#x3002;</li>
<li>&#x5728;&#x7C7B;&#x4E2D;&#x58F0;&#x660E;&#x540C;&#x65F6;&#x5B9A;&#x4E49;&#x7684;&#x6210;&#x5458;&#x51FD;&#x6570;&#xFF0C;&#x81EA;&#x52A8;&#x8F6C;&#x5316;&#x4E3A;&#x5185;&#x8054;&#x51FD;&#x6570;&#xFF0C;&#x56E0;&#x6B64;&#x5185;&#x8054;&#x51FD;&#x6570;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x7C7B;&#x7684;&#x6210;&#x5458;&#x53D8;&#x91CF;&#xFF0C;&#x5B8F;&#x5B9A;&#x4E49;&#x5219;&#x4E0D;&#x80FD;&#x3002;</li>
<li>&#x5185;&#x8054;&#x51FD;&#x6570;&#x5728;&#x8FD0;&#x884C;&#x65F6;&#x53EF;&#x8C03;&#x8BD5;&#xFF0C;&#x800C;&#x5B8F;&#x5B9A;&#x4E49;&#x4E0D;&#x53EF;&#x4EE5;&#x3002;</li>
</ol>
<p>&#x7F3A;&#x70B9;</p>
<ol>
<li>&#x4EE3;&#x7801;&#x81A8;&#x80C0;&#x3002;&#x5185;&#x8054;&#x662F;&#x4EE5;&#x4EE3;&#x7801;&#x81A8;&#x80C0;&#xFF08;&#x590D;&#x5236;&#xFF09;&#x4E3A;&#x4EE3;&#x4EF7;&#xFF0C;&#x6D88;&#x9664;&#x51FD;&#x6570;&#x8C03;&#x7528;&#x5E26;&#x6765;&#x7684;&#x5F00;&#x9500;&#x3002;&#x5982;&#x679C;&#x6267;&#x884C;&#x51FD;&#x6570;&#x4F53;&#x5185;&#x4EE3;&#x7801;&#x7684;&#x65F6;&#x95F4;&#xFF0C;&#x76F8;&#x6BD4;&#x4E8E;&#x51FD;&#x6570;&#x8C03;&#x7528;&#x7684;&#x5F00;&#x9500;&#x8F83;&#x5927;&#xFF0C;&#x90A3;&#x4E48;&#x6548;&#x7387;&#x7684;&#x6536;&#x83B7;&#x4F1A;&#x5F88;&#x5C11;&#x3002;&#x53E6;&#x4E00;&#x65B9;&#x9762;&#xFF0C;&#x6BCF;&#x4E00;&#x5904;&#x5185;&#x8054;&#x51FD;&#x6570;&#x7684;&#x8C03;&#x7528;&#x90FD;&#x8981;&#x590D;&#x5236;&#x4EE3;&#x7801;&#xFF0C;&#x5C06;&#x4F7F;&#x7A0B;&#x5E8F;&#x7684;&#x603B;&#x4EE3;&#x7801;&#x91CF;&#x589E;&#x5927;&#xFF0C;&#x6D88;&#x8017;&#x66F4;&#x591A;&#x7684;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#x3002;</li>
<li>inline &#x51FD;&#x6570;&#x65E0;&#x6CD5;&#x968F;&#x7740;&#x51FD;&#x6570;&#x5E93;&#x5347;&#x7EA7;&#x800C;&#x5347;&#x7EA7;&#x3002;inline&#x51FD;&#x6570;&#x7684;&#x6539;&#x53D8;&#x9700;&#x8981;&#x91CD;&#x65B0;&#x7F16;&#x8BD1;&#xFF0C;&#x4E0D;&#x50CF; non-inline &#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x94FE;&#x63A5;&#x3002;</li>
<li>&#x662F;&#x5426;&#x5185;&#x8054;&#xFF0C;&#x7A0B;&#x5E8F;&#x5458;&#x4E0D;&#x53EF;&#x63A7;&#x3002;&#x5185;&#x8054;&#x51FD;&#x6570;&#x53EA;&#x662F;&#x5BF9;&#x7F16;&#x8BD1;&#x5668;&#x7684;&#x5EFA;&#x8BAE;&#xFF0C;&#x662F;&#x5426;&#x5BF9;&#x51FD;&#x6570;&#x5185;&#x8054;&#xFF0C;&#x51B3;&#x5B9A;&#x6743;&#x5728;&#x4E8E;&#x7F16;&#x8BD1;&#x5668;&#x3002;</li>
</ol>
<h4 class="mume-header" id="%E8%99%9A%E5%87%BD%E6%95%B0virtual%E5%8F%AF%E4%BB%A5%E6%98%AF%E5%86%85%E8%81%94%E5%87%BD%E6%95%B0inline%E5%90%97">&#x865A;&#x51FD;&#x6570;&#xFF08;virtual&#xFF09;&#x53EF;&#x4EE5;&#x662F;&#x5185;&#x8054;&#x51FD;&#x6570;&#xFF08;inline&#xFF09;&#x5417;&#xFF1F;</h4>

<blockquote>
<p><a href="http://www.cs.technion.ac.il/users/yechiel/c++-faq/inline-virtuals.html">Are &quot;inline virtual&quot; member functions ever actually &quot;inlined&quot;?</a></p>
</blockquote>
<ul>
<li>&#x865A;&#x51FD;&#x6570;&#x53EF;&#x4EE5;&#x662F;&#x5185;&#x8054;&#x51FD;&#x6570;&#xFF0C;&#x5185;&#x8054;&#x662F;&#x53EF;&#x4EE5;&#x4FEE;&#x9970;&#x865A;&#x51FD;&#x6570;&#x7684;&#xFF0C;&#x4F46;&#x662F;&#x5F53;&#x865A;&#x51FD;&#x6570;&#x8868;&#x73B0;&#x591A;&#x6001;&#x6027;&#x7684;&#x65F6;&#x5019;&#x4E0D;&#x80FD;&#x5185;&#x8054;&#x3002;</li>
<li>&#x5185;&#x8054;&#x662F;&#x5728;&#x7F16;&#x8BD1;&#x5668;&#x5EFA;&#x8BAE;&#x7F16;&#x8BD1;&#x5668;&#x5185;&#x8054;&#xFF0C;&#x800C;&#x865A;&#x51FD;&#x6570;&#x7684;&#x591A;&#x6001;&#x6027;&#x5728;&#x8FD0;&#x884C;&#x671F;&#xFF0C;&#x7F16;&#x8BD1;&#x5668;&#x65E0;&#x6CD5;&#x77E5;&#x9053;&#x8FD0;&#x884C;&#x671F;&#x8C03;&#x7528;&#x54EA;&#x4E2A;&#x4EE3;&#x7801;&#xFF0C;&#x56E0;&#x6B64;&#x865A;&#x51FD;&#x6570;&#x8868;&#x73B0;&#x4E3A;&#x591A;&#x6001;&#x6027;&#x65F6;&#xFF08;&#x8FD0;&#x884C;&#x671F;&#xFF09;&#x4E0D;&#x53EF;&#x4EE5;&#x5185;&#x8054;&#x3002;</li>
<li><code>inline virtual</code> &#x552F;&#x4E00;&#x53EF;&#x4EE5;&#x5185;&#x8054;&#x7684;&#x65F6;&#x5019;&#x662F;&#xFF1A;&#x7F16;&#x8BD1;&#x5668;&#x77E5;&#x9053;&#x6240;&#x8C03;&#x7528;&#x7684;&#x5BF9;&#x8C61;&#x662F;&#x54EA;&#x4E2A;&#x7C7B;&#xFF08;&#x5982; <code>Base::who()</code>&#xFF09;&#xFF0C;&#x8FD9;&#x53EA;&#x6709;&#x5728;&#x7F16;&#x8BD1;&#x5668;&#x5177;&#x6709;&#x5B9E;&#x9645;&#x5BF9;&#x8C61;&#x800C;&#x4E0D;&#x662F;&#x5BF9;&#x8C61;&#x7684;&#x6307;&#x9488;&#x6216;&#x5F15;&#x7528;&#x65F6;&#x624D;&#x4F1A;&#x53D1;&#x751F;&#x3002;</li>
</ul>
<p>&#x865A;&#x51FD;&#x6570;&#x5185;&#x8054;&#x4F7F;&#x7528;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;iostream&gt;</span>  </span>
<span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span>
<span class="token keyword">class</span> <span class="token class-name">Base</span>
<span class="token punctuation">{</span>
<span class="token keyword">public</span><span class="token operator">:</span>
	<span class="token keyword">inline</span> <span class="token keyword">virtual</span> <span class="token keyword">void</span> <span class="token function">who</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
	<span class="token punctuation">{</span>
		cout <span class="token operator">&lt;&lt;</span> <span class="token string">&quot;I am Base\n&quot;</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>
	<span class="token keyword">virtual</span> <span class="token operator">~</span><span class="token function">Base</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token keyword">class</span> <span class="token class-name">Derived</span> <span class="token operator">:</span> <span class="token base-clause"><span class="token keyword">public</span> <span class="token class-name">Base</span></span>
<span class="token punctuation">{</span>
<span class="token keyword">public</span><span class="token operator">:</span>
	<span class="token keyword">inline</span> <span class="token keyword">void</span> <span class="token function">who</span><span class="token punctuation">(</span><span class="token punctuation">)</span>  <span class="token comment">// &#x4E0D;&#x5199;inline&#x65F6;&#x9690;&#x5F0F;&#x5185;&#x8054;</span>
	<span class="token punctuation">{</span>
		cout <span class="token operator">&lt;&lt;</span> <span class="token string">&quot;I am Derived\n&quot;</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>

<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
	<span class="token comment">// &#x6B64;&#x5904;&#x7684;&#x865A;&#x51FD;&#x6570; who()&#xFF0C;&#x662F;&#x901A;&#x8FC7;&#x7C7B;&#xFF08;Base&#xFF09;&#x7684;&#x5177;&#x4F53;&#x5BF9;&#x8C61;&#xFF08;b&#xFF09;&#x6765;&#x8C03;&#x7528;&#x7684;&#xFF0C;&#x7F16;&#x8BD1;&#x671F;&#x95F4;&#x5C31;&#x80FD;&#x786E;&#x5B9A;&#x4E86;&#xFF0C;&#x6240;&#x4EE5;&#x5B83;&#x53EF;&#x4EE5;&#x662F;&#x5185;&#x8054;&#x7684;&#xFF0C;&#x4F46;&#x6700;&#x7EC8;&#x662F;&#x5426;&#x5185;&#x8054;&#x53D6;&#x51B3;&#x4E8E;&#x7F16;&#x8BD1;&#x5668;&#x3002; </span>
	Base b<span class="token punctuation">;</span>
	b<span class="token punctuation">.</span><span class="token function">who</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

	<span class="token comment">// &#x6B64;&#x5904;&#x7684;&#x865A;&#x51FD;&#x6570;&#x662F;&#x901A;&#x8FC7;&#x6307;&#x9488;&#x8C03;&#x7528;&#x7684;&#xFF0C;&#x5448;&#x73B0;&#x591A;&#x6001;&#x6027;&#xFF0C;&#x9700;&#x8981;&#x5728;&#x8FD0;&#x884C;&#x65F6;&#x671F;&#x95F4;&#x624D;&#x80FD;&#x786E;&#x5B9A;&#xFF0C;&#x6240;&#x4EE5;&#x4E0D;&#x80FD;&#x4E3A;&#x5185;&#x8054;&#x3002;  </span>
	Base <span class="token operator">*</span>ptr <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">Derived</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	ptr<span class="token operator">-&gt;</span><span class="token function">who</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

	<span class="token comment">// &#x56E0;&#x4E3A;Base&#x6709;&#x865A;&#x6790;&#x6784;&#x51FD;&#x6570;&#xFF08;virtual ~Base() {}&#xFF09;&#xFF0C;&#x6240;&#x4EE5; delete &#x65F6;&#xFF0C;&#x4F1A;&#x5148;&#x8C03;&#x7528;&#x6D3E;&#x751F;&#x7C7B;&#xFF08;Derived&#xFF09;&#x6790;&#x6784;&#x51FD;&#x6570;&#xFF0C;&#x518D;&#x8C03;&#x7528;&#x57FA;&#x7C7B;&#xFF08;Base&#xFF09;&#x6790;&#x6784;&#x51FD;&#x6570;&#xFF0C;&#x9632;&#x6B62;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#x3002;</span>
	<span class="token keyword">delete</span> ptr<span class="token punctuation">;</span>
	ptr <span class="token operator">=</span> <span class="token keyword">nullptr</span><span class="token punctuation">;</span>

	<span class="token function">system</span><span class="token punctuation">(</span><span class="token string">&quot;pause&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> 
</pre><h3 class="mume-header" id="volatile">volatile</h3>

<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">volatile</span> <span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">;</span> 
</pre><ul>
<li>volatile &#x5173;&#x952E;&#x5B57;&#x662F;&#x4E00;&#x79CD;&#x7C7B;&#x578B;&#x4FEE;&#x9970;&#x7B26;&#xFF0C;&#x7528;&#x5B83;&#x58F0;&#x660E;&#x7684;&#x7C7B;&#x578B;&#x53D8;&#x91CF;&#x8868;&#x793A;&#x53EF;&#x4EE5;&#x88AB;&#x67D0;&#x4E9B;&#x7F16;&#x8BD1;&#x5668;&#x672A;&#x77E5;&#x7684;&#x56E0;&#x7D20;&#xFF08;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x3001;&#x786C;&#x4EF6;&#x3001;&#x5176;&#x5B83;&#x7EBF;&#x7A0B;&#x7B49;&#xFF09;&#x66F4;&#x6539;&#x3002;&#x6240;&#x4EE5;&#x4F7F;&#x7528; volatile &#x544A;&#x8BC9;&#x7F16;&#x8BD1;&#x5668;&#x4E0D;&#x5E94;&#x5BF9;&#x8FD9;&#x6837;&#x7684;&#x5BF9;&#x8C61;&#x8FDB;&#x884C;&#x4F18;&#x5316;&#x3002;</li>
<li>volatile &#x5173;&#x952E;&#x5B57;&#x58F0;&#x660E;&#x7684;&#x53D8;&#x91CF;&#xFF0C;&#x6BCF;&#x6B21;&#x8BBF;&#x95EE;&#x65F6;&#x90FD;&#x5FC5;&#x987B;&#x4ECE;&#x5185;&#x5B58;&#x4E2D;&#x53D6;&#x51FA;&#x503C;&#xFF08;&#x6CA1;&#x6709;&#x88AB; volatile &#x4FEE;&#x9970;&#x7684;&#x53D8;&#x91CF;&#xFF0C;&#x53EF;&#x80FD;&#x7531;&#x4E8E;&#x7F16;&#x8BD1;&#x5668;&#x7684;&#x4F18;&#x5316;&#xFF0C;&#x4ECE; CPU &#x5BC4;&#x5B58;&#x5668;&#x4E2D;&#x53D6;&#x503C;&#xFF09;</li>
<li>const &#x53EF;&#x4EE5;&#x662F; volatile &#xFF08;&#x5982;&#x53EA;&#x8BFB;&#x7684;&#x72B6;&#x6001;&#x5BC4;&#x5B58;&#x5668;&#xFF09;</li>
<li>&#x6307;&#x9488;&#x53EF;&#x4EE5;&#x662F; volatile</li>
</ul>
<h3 class="mume-header" id="assert">assert()</h3>

<p>&#x65AD;&#x8A00;&#xFF0C;&#x662F;&#x5B8F;&#xFF0C;&#x800C;&#x975E;&#x51FD;&#x6570;&#x3002;assert &#x5B8F;&#x7684;&#x539F;&#x578B;&#x5B9A;&#x4E49;&#x5728; <code>&lt;assert.h&gt;</code>&#xFF08;C&#xFF09;&#x3001;<code>&lt;cassert&gt;</code>&#xFF08;C++&#xFF09;&#x4E2D;&#xFF0C;&#x5176;&#x4F5C;&#x7528;&#x662F;&#x5982;&#x679C;&#x5B83;&#x7684;&#x6761;&#x4EF6;&#x8FD4;&#x56DE;&#x9519;&#x8BEF;&#xFF0C;&#x5219;&#x7EC8;&#x6B62;&#x7A0B;&#x5E8F;&#x6267;&#x884C;&#x3002;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x5B9A;&#x4E49; <code>NDEBUG</code> &#x6765;&#x5173;&#x95ED; assert&#xFF0C;&#x4F46;&#x662F;&#x9700;&#x8981;&#x5728;&#x6E90;&#x4EE3;&#x7801;&#x7684;&#x5F00;&#x5934;&#xFF0C;<code>include &lt;assert.h&gt;</code> &#x4E4B;&#x524D;&#x3002;</p>
<p>assert() &#x4F7F;&#x7528;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">NDEBUG</span>          <span class="token comment">// &#x52A0;&#x4E0A;&#x8FD9;&#x884C;&#xFF0C;&#x5219; assert &#x4E0D;&#x53EF;&#x7528;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;assert.h&gt;</span></span>

<span class="token function">assert</span><span class="token punctuation">(</span> p <span class="token operator">!=</span> <span class="token constant">NULL</span> <span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token comment">// assert &#x4E0D;&#x53EF;&#x7528;</span>
</pre><h3 class="mume-header" id="sizeof">sizeof()</h3>

<ul>
<li>sizeof &#x5BF9;&#x6570;&#x7EC4;&#xFF0C;&#x5F97;&#x5230;&#x6574;&#x4E2A;&#x6570;&#x7EC4;&#x6240;&#x5360;&#x7A7A;&#x95F4;&#x5927;&#x5C0F;&#x3002;</li>
<li>sizeof &#x5BF9;&#x6307;&#x9488;&#xFF0C;&#x5F97;&#x5230;&#x6307;&#x9488;&#x672C;&#x8EAB;&#x6240;&#x5360;&#x7A7A;&#x95F4;&#x5927;&#x5C0F;&#x3002;</li>
</ul>
<h3 class="mume-header" id="pragma-packn">#pragma pack(n)</h3>

<p>&#x8BBE;&#x5B9A;&#x7ED3;&#x6784;&#x4F53;&#x3001;&#x8054;&#x5408;&#x4EE5;&#x53CA;&#x7C7B;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x4EE5; n &#x5B57;&#x8282;&#x65B9;&#x5F0F;&#x5BF9;&#x9F50;</p>
<h1 class="mume-header" id="pragma-packn-%E4%BD%BF%E7%94%A8">pragma pack(n) &#x4F7F;&#x7528;</h1>

<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">pragma</span> <span class="token expression"><span class="token function">pack</span><span class="token punctuation">(</span>push<span class="token punctuation">)</span>  </span><span class="token comment">// &#x4FDD;&#x5B58;&#x5BF9;&#x9F50;&#x72B6;&#x6001;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">pragma</span> <span class="token expression"><span class="token function">pack</span><span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">)</span>     </span><span class="token comment">// &#x8BBE;&#x5B9A;&#x4E3A; 4 &#x5B57;&#x8282;&#x5BF9;&#x9F50;</span></span>

<span class="token keyword">struct</span> <span class="token class-name">test</span>
<span class="token punctuation">{</span>
    <span class="token keyword">char</span> m1<span class="token punctuation">;</span>
    <span class="token keyword">double</span> m4<span class="token punctuation">;</span>
    <span class="token keyword">int</span> m3<span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>

<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">pragma</span> <span class="token expression"><span class="token function">pack</span><span class="token punctuation">(</span>pop<span class="token punctuation">)</span>   </span><span class="token comment">// &#x6062;&#x590D;&#x5BF9;&#x9F50;&#x72B6;&#x6001;</span></span>
</pre><h3 class="mume-header" id="%E4%BD%8D%E5%9F%9F">&#x4F4D;&#x57DF;</h3>

<pre data-role="codeBlock" data-info="cpp" class="language-cpp">Bit mode<span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">;</span>    <span class="token comment">// mode &#x5360; 2 &#x4F4D;</span>
</pre><p>&#x7C7B;&#x53EF;&#x4EE5;&#x5C06;&#x5176;&#xFF08;&#x975E;&#x9759;&#x6001;&#xFF09;&#x6570;&#x636E;&#x6210;&#x5458;&#x5B9A;&#x4E49;&#x4E3A;&#x4F4D;&#x57DF;&#xFF08;bit-field&#xFF09;&#xFF0C;&#x5728;&#x4E00;&#x4E2A;&#x4F4D;&#x57DF;&#x4E2D;&#x542B;&#x6709;&#x4E00;&#x5B9A;&#x6570;&#x91CF;&#x7684;&#x4E8C;&#x8FDB;&#x5236;&#x4F4D;&#x3002;&#x5F53;&#x4E00;&#x4E2A;&#x7A0B;&#x5E8F;&#x9700;&#x8981;&#x5411;&#x5176;&#x4ED6;&#x7A0B;&#x5E8F;&#x6216;&#x786C;&#x4EF6;&#x8BBE;&#x5907;&#x4F20;&#x9012;&#x4E8C;&#x8FDB;&#x5236;&#x6570;&#x636E;&#x65F6;&#xFF0C;&#x901A;&#x5E38;&#x4F1A;&#x7528;&#x5230;&#x4F4D;&#x57DF;&#x3002;</p>
<ul>
<li>&#x4F4D;&#x57DF;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x7684;&#x5E03;&#x5C40;&#x662F;&#x4E0E;&#x673A;&#x5668;&#x6709;&#x5173;&#x7684;</li>
<li>&#x4F4D;&#x57DF;&#x7684;&#x7C7B;&#x578B;&#x5FC5;&#x987B;&#x662F;&#x6574;&#x578B;&#x6216;&#x679A;&#x4E3E;&#x7C7B;&#x578B;&#xFF0C;&#x5E26;&#x7B26;&#x53F7;&#x7C7B;&#x578B;&#x4E2D;&#x7684;&#x4F4D;&#x57DF;&#x7684;&#x884C;&#x4E3A;&#x5C06;&#x56E0;&#x5177;&#x4F53;&#x5B9E;&#x73B0;&#x800C;&#x5B9A;</li>
<li>&#x53D6;&#x5730;&#x5740;&#x8FD0;&#x7B97;&#x7B26;&#xFF08;&amp;&#xFF09;&#x4E0D;&#x80FD;&#x4F5C;&#x7528;&#x4E8E;&#x4F4D;&#x57DF;&#xFF0C;&#x4EFB;&#x4F55;&#x6307;&#x9488;&#x90FD;&#x65E0;&#x6CD5;&#x6307;&#x5411;&#x7C7B;&#x7684;&#x4F4D;&#x57DF;</li>
</ul>
<h3 class="mume-header" id="extern-c">extern &quot;C&quot;</h3>

<ul>
<li>&#x88AB; extern &#x9650;&#x5B9A;&#x7684;&#x51FD;&#x6570;&#x6216;&#x53D8;&#x91CF;&#x662F; extern &#x7C7B;&#x578B;&#x7684;</li>
<li>&#x88AB; <code>extern &quot;C&quot;</code> &#x4FEE;&#x9970;&#x7684;&#x53D8;&#x91CF;&#x548C;&#x51FD;&#x6570;&#x662F;&#x6309;&#x7167; C &#x8BED;&#x8A00;&#x65B9;&#x5F0F;&#x7F16;&#x8BD1;&#x548C;&#x94FE;&#x63A5;&#x7684;</li>
</ul>
<p><code>extern &quot;C&quot;</code> &#x7684;&#x4F5C;&#x7528;&#x662F;&#x8BA9; C++ &#x7F16;&#x8BD1;&#x5668;&#x5C06; <code>extern &quot;C&quot;</code> &#x58F0;&#x660E;&#x7684;&#x4EE3;&#x7801;&#x5F53;&#x4F5C; C &#x8BED;&#x8A00;&#x4EE3;&#x7801;&#x5904;&#x7406;&#xFF0C;&#x53EF;&#x4EE5;&#x907F;&#x514D; C++ &#x56E0;&#x7B26;&#x53F7;&#x4FEE;&#x9970;&#x5BFC;&#x81F4;&#x4EE3;&#x7801;&#x4E0D;&#x80FD;&#x548C;C&#x8BED;&#x8A00;&#x5E93;&#x4E2D;&#x7684;&#x7B26;&#x53F7;&#x8FDB;&#x884C;&#x94FE;&#x63A5;&#x7684;&#x95EE;&#x9898;&#x3002;</p>
<p>extern &quot;C&quot; &#x4F7F;&#x7528;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">ifdef</span> <span class="token expression">__cplusplus</span></span>
<span class="token keyword">extern</span> <span class="token string">&quot;C&quot;</span> <span class="token punctuation">{</span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">endif</span></span>

<span class="token keyword">void</span> <span class="token operator">*</span><span class="token function">memset</span><span class="token punctuation">(</span><span class="token keyword">void</span> <span class="token operator">*</span><span class="token punctuation">,</span> <span class="token keyword">int</span><span class="token punctuation">,</span> size_t<span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">ifdef</span> <span class="token expression">__cplusplus</span></span>
<span class="token punctuation">}</span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">endif</span></span>
</pre><h3 class="mume-header" id="struct-%E5%92%8C-typedef-struct">struct &#x548C; typedef struct</h3>

<h4 class="mume-header" id="c-%E4%B8%AD">C &#x4E2D;</h4>

<pre data-role="codeBlock" data-info="c" class="language-c"><span class="token comment">// c</span>
<span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token class-name">Student</span> <span class="token punctuation">{</span>
    <span class="token keyword">int</span> age<span class="token punctuation">;</span> 
<span class="token punctuation">}</span> S<span class="token punctuation">;</span>
</pre><p>&#x7B49;&#x4EF7;&#x4E8E;</p>
<pre data-role="codeBlock" data-info="c" class="language-c"><span class="token comment">// c</span>
<span class="token keyword">struct</span> <span class="token class-name">Student</span> <span class="token punctuation">{</span> 
    <span class="token keyword">int</span> age<span class="token punctuation">;</span> 
<span class="token punctuation">}</span><span class="token punctuation">;</span>

<span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token class-name">Student</span> S<span class="token punctuation">;</span>
</pre><p>&#x6B64;&#x65F6; <code>S</code> &#x7B49;&#x4EF7;&#x4E8E; <code>struct Student</code>&#xFF0C;&#x4F46;&#x4E24;&#x4E2A;&#x6807;&#x8BC6;&#x7B26;&#x540D;&#x79F0;&#x7A7A;&#x95F4;&#x4E0D;&#x76F8;&#x540C;&#x3002;</p>
<p>&#x53E6;&#x5916;&#x8FD8;&#x53EF;&#x4EE5;&#x5B9A;&#x4E49;&#x4E0E; <code>struct Student</code> &#x4E0D;&#x51B2;&#x7A81;&#x7684; <code>void Student() {}</code>&#x3002;</p>
<h4 class="mume-header" id="c-%E4%B8%AD-1">C++ &#x4E2D;</h4>

<p>&#x7531;&#x4E8E;&#x7F16;&#x8BD1;&#x5668;&#x5B9A;&#x4F4D;&#x7B26;&#x53F7;&#x7684;&#x89C4;&#x5219;&#xFF08;&#x641C;&#x7D22;&#x89C4;&#x5219;&#xFF09;&#x6539;&#x53D8;&#xFF0C;&#x5BFC;&#x81F4;&#x4E0D;&#x540C;&#x4E8E;C&#x8BED;&#x8A00;&#x3002;</p>
<p>&#x4E00;&#x3001;&#x5982;&#x679C;&#x5728;&#x7C7B;&#x6807;&#x8BC6;&#x7B26;&#x7A7A;&#x95F4;&#x5B9A;&#x4E49;&#x4E86; <code>struct Student {...};</code>&#xFF0C;&#x4F7F;&#x7528; <code>Student me;</code> &#x65F6;&#xFF0C;&#x7F16;&#x8BD1;&#x5668;&#x5C06;&#x641C;&#x7D22;&#x5168;&#x5C40;&#x6807;&#x8BC6;&#x7B26;&#x8868;&#xFF0C;<code>Student</code> &#x672A;&#x627E;&#x5230;&#xFF0C;&#x5219;&#x5728;&#x7C7B;&#x6807;&#x8BC6;&#x7B26;&#x5185;&#x641C;&#x7D22;&#x3002;</p>
<p>&#x5373;&#x8868;&#x73B0;&#x4E3A;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; <code>Student</code> &#x4E5F;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; <code>struct Student</code>&#xFF0C;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token comment">// cpp</span>
<span class="token keyword">struct</span> <span class="token class-name">Student</span> <span class="token punctuation">{</span> 
    <span class="token keyword">int</span> age<span class="token punctuation">;</span> 
<span class="token punctuation">}</span><span class="token punctuation">;</span>

<span class="token keyword">void</span> <span class="token function">f</span><span class="token punctuation">(</span> Student me <span class="token punctuation">)</span><span class="token punctuation">;</span>       <span class="token comment">// &#x6B63;&#x786E;&#xFF0C;&quot;struct&quot; &#x5173;&#x952E;&#x5B57;&#x53EF;&#x7701;&#x7565;</span>
</pre><p>&#x4E8C;&#x3001;&#x82E5;&#x5B9A;&#x4E49;&#x4E86;&#x4E0E; <code>Student</code> &#x540C;&#x540D;&#x51FD;&#x6570;&#x4E4B;&#x540E;&#xFF0C;&#x5219; <code>Student</code> &#x53EA;&#x4EE3;&#x8868;&#x51FD;&#x6570;&#xFF0C;&#x4E0D;&#x4EE3;&#x8868;&#x7ED3;&#x6784;&#x4F53;&#xFF0C;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token class-name">Student</span> <span class="token punctuation">{</span> 
    <span class="token keyword">int</span> age<span class="token punctuation">;</span> 
<span class="token punctuation">}</span> S<span class="token punctuation">;</span>

<span class="token keyword">void</span> <span class="token function">Student</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>           <span class="token comment">// &#x6B63;&#x786E;&#xFF0C;&#x5B9A;&#x4E49;&#x540E; &quot;Student&quot; &#x53EA;&#x4EE3;&#x8868;&#x6B64;&#x51FD;&#x6570;</span>

<span class="token comment">//void S() {}               // &#x9519;&#x8BEF;&#xFF0C;&#x7B26;&#x53F7; &quot;S&quot; &#x5DF2;&#x7ECF;&#x88AB;&#x5B9A;&#x4E49;&#x4E3A;&#x4E00;&#x4E2A; &quot;struct Student&quot; &#x7684;&#x522B;&#x540D;</span>

<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token function">Student</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 
    <span class="token keyword">struct</span> <span class="token class-name">Student</span> me<span class="token punctuation">;</span>      <span class="token comment">// &#x6216;&#x8005; &quot;S me&quot;;</span>
    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</pre><h3 class="mume-header" id="c-%E4%B8%AD-struct-%E5%92%8C-class">C++ &#x4E2D; struct &#x548C; class</h3>

<p>&#x603B;&#x7684;&#x6765;&#x8BF4;&#xFF0C;struct &#x66F4;&#x9002;&#x5408;&#x770B;&#x6210;&#x662F;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x7684;&#x5B9E;&#x73B0;&#x4F53;&#xFF0C;class &#x66F4;&#x9002;&#x5408;&#x770B;&#x6210;&#x662F;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x5B9E;&#x73B0;&#x4F53;&#x3002;</p>
<h4 class="mume-header" id="%E5%8C%BA%E5%88%AB">&#x533A;&#x522B;</h4>

<ul>
<li>&#x6700;&#x672C;&#x8D28;&#x7684;&#x4E00;&#x4E2A;&#x533A;&#x522B;&#x5C31;&#x662F;&#x9ED8;&#x8BA4;&#x7684;&#x8BBF;&#x95EE;&#x63A7;&#x5236;
<ol>
<li>&#x9ED8;&#x8BA4;&#x7684;&#x7EE7;&#x627F;&#x8BBF;&#x95EE;&#x6743;&#x9650;&#x3002;struct &#x662F; public &#x7684;&#xFF0C;class &#x662F; private &#x7684;&#x3002;</li>
<li>struct &#x4F5C;&#x4E3A;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x7684;&#x5B9E;&#x73B0;&#x4F53;&#xFF0C;&#x5B83;&#x9ED8;&#x8BA4;&#x7684;&#x6570;&#x636E;&#x8BBF;&#x95EE;&#x63A7;&#x5236;&#x662F; public &#x7684;&#xFF0C;&#x800C; class &#x4F5C;&#x4E3A;&#x5BF9;&#x8C61;&#x7684;&#x5B9E;&#x73B0;&#x4F53;&#xFF0C;&#x5B83;&#x9ED8;&#x8BA4;&#x7684;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x8BBF;&#x95EE;&#x63A7;&#x5236;&#x662F; private &#x7684;&#x3002;</li>
</ol>
</li>
</ul>
<h3 class="mume-header" id="union-%E8%81%94%E5%90%88">union &#x8054;&#x5408;</h3>

<p>&#x8054;&#x5408;&#xFF08;union&#xFF09;&#x662F;&#x4E00;&#x79CD;&#x8282;&#x7701;&#x7A7A;&#x95F4;&#x7684;&#x7279;&#x6B8A;&#x7684;&#x7C7B;&#xFF0C;&#x4E00;&#x4E2A; union &#x53EF;&#x4EE5;&#x6709;&#x591A;&#x4E2A;&#x6570;&#x636E;&#x6210;&#x5458;&#xFF0C;&#x4F46;&#x662F;&#x5728;&#x4EFB;&#x610F;&#x65F6;&#x523B;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x6210;&#x5458;&#x53EF;&#x4EE5;&#x6709;&#x503C;&#x3002;&#x5F53;&#x67D0;&#x4E2A;&#x6210;&#x5458;&#x88AB;&#x8D4B;&#x503C;&#x540E;&#x5176;&#x4ED6;&#x6210;&#x5458;&#x53D8;&#x4E3A;&#x672A;&#x5B9A;&#x4E49;&#x72B6;&#x6001;&#x3002;&#x8054;&#x5408;&#x6709;&#x5982;&#x4E0B;&#x7279;&#x70B9;&#xFF1A;</p>
<ul>
<li>&#x9ED8;&#x8BA4;&#x8BBF;&#x95EE;&#x63A7;&#x5236;&#x7B26;&#x4E3A; public</li>
<li>&#x53EF;&#x4EE5;&#x542B;&#x6709;&#x6784;&#x9020;&#x51FD;&#x6570;&#x3001;&#x6790;&#x6784;&#x51FD;&#x6570;</li>
<li>&#x4E0D;&#x80FD;&#x542B;&#x6709;&#x5F15;&#x7528;&#x7C7B;&#x578B;&#x7684;&#x6210;&#x5458;</li>
<li>&#x4E0D;&#x80FD;&#x7EE7;&#x627F;&#x81EA;&#x5176;&#x4ED6;&#x7C7B;&#xFF0C;&#x4E0D;&#x80FD;&#x4F5C;&#x4E3A;&#x57FA;&#x7C7B;</li>
<li>&#x4E0D;&#x80FD;&#x542B;&#x6709;&#x865A;&#x51FD;&#x6570;</li>
<li>&#x533F;&#x540D; union &#x5728;&#x5B9A;&#x4E49;&#x6240;&#x5728;&#x4F5C;&#x7528;&#x57DF;&#x53EF;&#x76F4;&#x63A5;&#x8BBF;&#x95EE; union &#x6210;&#x5458;</li>
<li>&#x533F;&#x540D; union &#x4E0D;&#x80FD;&#x5305;&#x542B; protected &#x6210;&#x5458;&#x6216; private &#x6210;&#x5458;</li>
<li>&#x5168;&#x5C40;&#x533F;&#x540D;&#x8054;&#x5408;&#x5FC5;&#x987B;&#x662F;&#x9759;&#x6001;&#xFF08;static&#xFF09;&#x7684;</li>
</ul>
<p>union &#x4F7F;&#x7528;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span><span class="token string">&lt;iostream&gt;</span></span>

<span class="token keyword">union</span> UnionTest <span class="token punctuation">{</span>
    <span class="token function">UnionTest</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">:</span> <span class="token function">i</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
    <span class="token keyword">int</span> i<span class="token punctuation">;</span>
    <span class="token keyword">double</span> d<span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>

<span class="token keyword">static</span> <span class="token keyword">union</span> <span class="token punctuation">{</span>
    <span class="token keyword">int</span> i<span class="token punctuation">;</span>
    <span class="token keyword">double</span> d<span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>

<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    UnionTest u<span class="token punctuation">;</span>

    <span class="token keyword">union</span> <span class="token punctuation">{</span>
        <span class="token keyword">int</span> i<span class="token punctuation">;</span>
        <span class="token keyword">double</span> d<span class="token punctuation">;</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span>

    std<span class="token operator">::</span>cout <span class="token operator">&lt;&lt;</span> u<span class="token punctuation">.</span>i <span class="token operator">&lt;&lt;</span> std<span class="token operator">::</span>endl<span class="token punctuation">;</span>  <span class="token comment">// &#x8F93;&#x51FA; UnionTest &#x8054;&#x5408;&#x7684; 10</span>

    <span class="token operator">::</span>i <span class="token operator">=</span> <span class="token number">20</span><span class="token punctuation">;</span>
    std<span class="token operator">::</span>cout <span class="token operator">&lt;&lt;</span> <span class="token operator">::</span>i <span class="token operator">&lt;&lt;</span> std<span class="token operator">::</span>endl<span class="token punctuation">;</span>  <span class="token comment">// &#x8F93;&#x51FA;&#x5168;&#x5C40;&#x9759;&#x6001;&#x533F;&#x540D;&#x8054;&#x5408;&#x7684; 20</span>

    i <span class="token operator">=</span> <span class="token number">30</span><span class="token punctuation">;</span>
    std<span class="token operator">::</span>cout <span class="token operator">&lt;&lt;</span> i <span class="token operator">&lt;&lt;</span> std<span class="token operator">::</span>endl<span class="token punctuation">;</span>    <span class="token comment">// &#x8F93;&#x51FA;&#x5C40;&#x90E8;&#x533F;&#x540D;&#x8054;&#x5408;&#x7684; 30</span>

    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</pre><h3 class="mume-header" id="c-%E5%AE%9E%E7%8E%B0-c-%E7%B1%BB">C &#x5B9E;&#x73B0; C++ &#x7C7B;</h3>

<p>C &#x5B9E;&#x73B0; C++ &#x7684;&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x7279;&#x6027;&#xFF08;&#x5C01;&#x88C5;&#x3001;&#x7EE7;&#x627F;&#x3001;&#x591A;&#x6001;&#xFF09;</p>
<ul>
<li>&#x5C01;&#x88C5;&#xFF1A;&#x4F7F;&#x7528;&#x51FD;&#x6570;&#x6307;&#x9488;&#x628A;&#x5C5E;&#x6027;&#x4E0E;&#x65B9;&#x6CD5;&#x5C01;&#x88C5;&#x5230;&#x7ED3;&#x6784;&#x4F53;&#x4E2D;</li>
<li>&#x7EE7;&#x627F;&#xFF1A;&#x7ED3;&#x6784;&#x4F53;&#x5D4C;&#x5957;</li>
<li>&#x591A;&#x6001;&#xFF1A;&#x7236;&#x7C7B;&#x4E0E;&#x5B50;&#x7C7B;&#x65B9;&#x6CD5;&#x7684;&#x51FD;&#x6570;&#x6307;&#x9488;&#x4E0D;&#x540C;</li>
</ul>
<blockquote>
<p><a href="https://stackoverflow.com/a/351745">Can you write object-oriented code in C? [closed]</a></p>
</blockquote>
<h3 class="mume-header" id="explicit%E6%98%BE%E5%BC%8F%E5%85%B3%E9%94%AE%E5%AD%97">explicit&#xFF08;&#x663E;&#x5F0F;&#xFF09;&#x5173;&#x952E;&#x5B57;</h3>

<ul>
<li>explicit &#x4FEE;&#x9970;&#x6784;&#x9020;&#x51FD;&#x6570;&#x65F6;&#xFF0C;&#x53EF;&#x4EE5;&#x9632;&#x6B62;&#x9690;&#x5F0F;&#x8F6C;&#x6362;&#x548C;&#x590D;&#x5236;&#x521D;&#x59CB;&#x5316;</li>
<li>explicit &#x4FEE;&#x9970;&#x8F6C;&#x6362;&#x51FD;&#x6570;&#x65F6;&#xFF0C;&#x53EF;&#x4EE5;&#x9632;&#x6B62;&#x9690;&#x5F0F;&#x8F6C;&#x6362;&#xFF0C;&#x4F46; <a href="https://zh.cppreference.com/w/cpp/language/implicit_conversion">&#x6309;&#x8BED;&#x5883;&#x8F6C;&#x6362;</a> &#x9664;&#x5916;</li>
</ul>
<p>explicit &#x4F7F;&#x7528;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">struct</span> <span class="token class-name">A</span>
<span class="token punctuation">{</span>
	<span class="token function">A</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span>
	<span class="token keyword">operator</span> <span class="token keyword">bool</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">const</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span> <span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>

<span class="token keyword">struct</span> <span class="token class-name">B</span>
<span class="token punctuation">{</span>
	<span class="token keyword">explicit</span> <span class="token function">B</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
	<span class="token keyword">explicit</span> <span class="token keyword">operator</span> <span class="token keyword">bool</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">const</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span> <span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>

<span class="token keyword">void</span> <span class="token function">doA</span><span class="token punctuation">(</span>A a<span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>

<span class="token keyword">void</span> <span class="token function">doB</span><span class="token punctuation">(</span>B b<span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>

<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
	A <span class="token function">a1</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>		<span class="token comment">// OK&#xFF1A;&#x76F4;&#x63A5;&#x521D;&#x59CB;&#x5316;</span>
	A a2 <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>		<span class="token comment">// OK&#xFF1A;&#x590D;&#x5236;&#x521D;&#x59CB;&#x5316;</span>
	A a3<span class="token punctuation">{</span> <span class="token number">1</span> <span class="token punctuation">}</span><span class="token punctuation">;</span>		<span class="token comment">// OK&#xFF1A;&#x76F4;&#x63A5;&#x5217;&#x8868;&#x521D;&#x59CB;&#x5316;</span>
	A a4 <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token number">1</span> <span class="token punctuation">}</span><span class="token punctuation">;</span>		<span class="token comment">// OK&#xFF1A;&#x590D;&#x5236;&#x5217;&#x8868;&#x521D;&#x59CB;&#x5316;</span>
	A a5 <span class="token operator">=</span> <span class="token punctuation">(</span>A<span class="token punctuation">)</span><span class="token number">1</span><span class="token punctuation">;</span>		<span class="token comment">// OK&#xFF1A;&#x5141;&#x8BB8; static_cast &#x7684;&#x663E;&#x5F0F;&#x8F6C;&#x6362; </span>
	<span class="token function">doA</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>			<span class="token comment">// OK&#xFF1A;&#x5141;&#x8BB8;&#x4ECE; int &#x5230; A &#x7684;&#x9690;&#x5F0F;&#x8F6C;&#x6362;</span>
	<span class="token keyword">if</span> <span class="token punctuation">(</span>a1<span class="token punctuation">)</span><span class="token punctuation">;</span>		<span class="token comment">// OK&#xFF1A;&#x4F7F;&#x7528;&#x8F6C;&#x6362;&#x51FD;&#x6570; A::operator bool() &#x7684;&#x4ECE; A &#x5230; bool &#x7684;&#x9690;&#x5F0F;&#x8F6C;&#x6362;</span>
	<span class="token keyword">bool</span> <span class="token function">a6</span><span class="token punctuation">(</span>a1<span class="token punctuation">)</span><span class="token punctuation">;</span>		<span class="token comment">// OK&#xFF1A;&#x4F7F;&#x7528;&#x8F6C;&#x6362;&#x51FD;&#x6570; A::operator bool() &#x7684;&#x4ECE; A &#x5230; bool &#x7684;&#x9690;&#x5F0F;&#x8F6C;&#x6362;</span>
	<span class="token keyword">bool</span> a7 <span class="token operator">=</span> a1<span class="token punctuation">;</span>		<span class="token comment">// OK&#xFF1A;&#x4F7F;&#x7528;&#x8F6C;&#x6362;&#x51FD;&#x6570; A::operator bool() &#x7684;&#x4ECE; A &#x5230; bool &#x7684;&#x9690;&#x5F0F;&#x8F6C;&#x6362;</span>
	<span class="token keyword">bool</span> a8 <span class="token operator">=</span> <span class="token keyword">static_cast</span><span class="token operator">&lt;</span><span class="token keyword">bool</span><span class="token operator">&gt;</span><span class="token punctuation">(</span>a1<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token comment">// OK &#xFF1A;static_cast &#x8FDB;&#x884C;&#x76F4;&#x63A5;&#x521D;&#x59CB;&#x5316;</span>

	B <span class="token function">b1</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>		<span class="token comment">// OK&#xFF1A;&#x76F4;&#x63A5;&#x521D;&#x59CB;&#x5316;</span>
	B b2 <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>		<span class="token comment">// &#x9519;&#x8BEF;&#xFF1A;&#x88AB; explicit &#x4FEE;&#x9970;&#x6784;&#x9020;&#x51FD;&#x6570;&#x7684;&#x5BF9;&#x8C61;&#x4E0D;&#x53EF;&#x4EE5;&#x590D;&#x5236;&#x521D;&#x59CB;&#x5316;</span>
	B b3<span class="token punctuation">{</span> <span class="token number">1</span> <span class="token punctuation">}</span><span class="token punctuation">;</span>		<span class="token comment">// OK&#xFF1A;&#x76F4;&#x63A5;&#x5217;&#x8868;&#x521D;&#x59CB;&#x5316;</span>
	B b4 <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token number">1</span> <span class="token punctuation">}</span><span class="token punctuation">;</span>		<span class="token comment">// &#x9519;&#x8BEF;&#xFF1A;&#x88AB; explicit &#x4FEE;&#x9970;&#x6784;&#x9020;&#x51FD;&#x6570;&#x7684;&#x5BF9;&#x8C61;&#x4E0D;&#x53EF;&#x4EE5;&#x590D;&#x5236;&#x5217;&#x8868;&#x521D;&#x59CB;&#x5316;</span>
	B b5 <span class="token operator">=</span> <span class="token punctuation">(</span>B<span class="token punctuation">)</span><span class="token number">1</span><span class="token punctuation">;</span>		<span class="token comment">// OK&#xFF1A;&#x5141;&#x8BB8; static_cast &#x7684;&#x663E;&#x5F0F;&#x8F6C;&#x6362;</span>
	<span class="token function">doB</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>			<span class="token comment">// &#x9519;&#x8BEF;&#xFF1A;&#x88AB; explicit &#x4FEE;&#x9970;&#x6784;&#x9020;&#x51FD;&#x6570;&#x7684;&#x5BF9;&#x8C61;&#x4E0D;&#x53EF;&#x4EE5;&#x4ECE; int &#x5230; B &#x7684;&#x9690;&#x5F0F;&#x8F6C;&#x6362;</span>
	<span class="token keyword">if</span> <span class="token punctuation">(</span>b1<span class="token punctuation">)</span><span class="token punctuation">;</span>		<span class="token comment">// OK&#xFF1A;&#x88AB; explicit &#x4FEE;&#x9970;&#x8F6C;&#x6362;&#x51FD;&#x6570; B::operator bool() &#x7684;&#x5BF9;&#x8C61;&#x53EF;&#x4EE5;&#x4ECE; B &#x5230; bool &#x7684;&#x6309;&#x8BED;&#x5883;&#x8F6C;&#x6362;</span>
	<span class="token keyword">bool</span> <span class="token function">b6</span><span class="token punctuation">(</span>b1<span class="token punctuation">)</span><span class="token punctuation">;</span>		<span class="token comment">// OK&#xFF1A;&#x88AB; explicit &#x4FEE;&#x9970;&#x8F6C;&#x6362;&#x51FD;&#x6570; B::operator bool() &#x7684;&#x5BF9;&#x8C61;&#x53EF;&#x4EE5;&#x4ECE; B &#x5230; bool &#x7684;&#x6309;&#x8BED;&#x5883;&#x8F6C;&#x6362;</span>
	<span class="token keyword">bool</span> b7 <span class="token operator">=</span> b1<span class="token punctuation">;</span>		<span class="token comment">// &#x9519;&#x8BEF;&#xFF1A;&#x88AB; explicit &#x4FEE;&#x9970;&#x8F6C;&#x6362;&#x51FD;&#x6570; B::operator bool() &#x7684;&#x5BF9;&#x8C61;&#x4E0D;&#x53EF;&#x4EE5;&#x9690;&#x5F0F;&#x8F6C;&#x6362;</span>
	<span class="token keyword">bool</span> b8 <span class="token operator">=</span> <span class="token keyword">static_cast</span><span class="token operator">&lt;</span><span class="token keyword">bool</span><span class="token operator">&gt;</span><span class="token punctuation">(</span>b1<span class="token punctuation">)</span><span class="token punctuation">;</span>  <span class="token comment">// OK&#xFF1A;static_cast &#x8FDB;&#x884C;&#x76F4;&#x63A5;&#x521D;&#x59CB;&#x5316;</span>

	<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</pre><h3 class="mume-header" id="friend-%E5%8F%8B%E5%85%83%E7%B1%BB%E5%92%8C%E5%8F%8B%E5%85%83%E5%87%BD%E6%95%B0">friend &#x53CB;&#x5143;&#x7C7B;&#x548C;&#x53CB;&#x5143;&#x51FD;&#x6570;</h3>

<ul>
<li>&#x80FD;&#x8BBF;&#x95EE;&#x79C1;&#x6709;&#x6210;&#x5458;</li>
<li>&#x7834;&#x574F;&#x5C01;&#x88C5;&#x6027;</li>
<li>&#x53CB;&#x5143;&#x5173;&#x7CFB;&#x4E0D;&#x53EF;&#x4F20;&#x9012;</li>
<li>&#x53CB;&#x5143;&#x5173;&#x7CFB;&#x7684;&#x5355;&#x5411;&#x6027;</li>
<li>&#x53CB;&#x5143;&#x58F0;&#x660E;&#x7684;&#x5F62;&#x5F0F;&#x53CA;&#x6570;&#x91CF;&#x4E0D;&#x53D7;&#x9650;&#x5236;</li>
</ul>
<h3 class="mume-header" id="using">using</h3>

<h4 class="mume-header" id="using-%E5%A3%B0%E6%98%8E">using &#x58F0;&#x660E;</h4>

<p>&#x4E00;&#x6761; <code>using &#x58F0;&#x660E;</code> &#x8BED;&#x53E5;&#x4E00;&#x6B21;&#x53EA;&#x5F15;&#x5165;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x7684;&#x4E00;&#x4E2A;&#x6210;&#x5458;&#x3002;&#x5B83;&#x4F7F;&#x5F97;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x6E05;&#x695A;&#x77E5;&#x9053;&#x7A0B;&#x5E8F;&#x4E2D;&#x6240;&#x5F15;&#x7528;&#x7684;&#x5230;&#x5E95;&#x662F;&#x54EA;&#x4E2A;&#x540D;&#x5B57;&#x3002;&#x5982;&#xFF1A;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">using</span> namespace_name<span class="token operator">::</span>name<span class="token punctuation">;</span>
</pre><h4 class="mume-header" id="%E6%9E%84%E9%80%A0%E5%87%BD%E6%95%B0%E7%9A%84-using-%E5%A3%B0%E6%98%8E">&#x6784;&#x9020;&#x51FD;&#x6570;&#x7684; using &#x58F0;&#x660E;</h4>

<p>&#x5728; C++11 &#x4E2D;&#xFF0C;&#x6D3E;&#x751F;&#x7C7B;&#x80FD;&#x591F;&#x91CD;&#x7528;&#x5176;&#x76F4;&#x63A5;&#x57FA;&#x7C7B;&#x5B9A;&#x4E49;&#x7684;&#x6784;&#x9020;&#x51FD;&#x6570;&#x3002;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Derived</span> <span class="token operator">:</span> <span class="token base-clause"><span class="token class-name">Base</span></span> <span class="token punctuation">{</span>
<span class="token keyword">public</span><span class="token operator">:</span>
    <span class="token keyword">using</span> Base<span class="token operator">::</span>Base<span class="token punctuation">;</span>
    <span class="token comment">/* ... */</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
</pre><p>&#x5982;&#x4E0A; using &#x58F0;&#x660E;&#xFF0C;&#x5BF9;&#x4E8E;&#x57FA;&#x7C7B;&#x7684;&#x6BCF;&#x4E2A;&#x6784;&#x9020;&#x51FD;&#x6570;&#xFF0C;&#x7F16;&#x8BD1;&#x5668;&#x90FD;&#x751F;&#x6210;&#x4E00;&#x4E2A;&#x4E0E;&#x4E4B;&#x5BF9;&#x5E94;&#xFF08;&#x5F62;&#x53C2;&#x5217;&#x8868;&#x5B8C;&#x5168;&#x76F8;&#x540C;&#xFF09;&#x7684;&#x6D3E;&#x751F;&#x7C7B;&#x6784;&#x9020;&#x51FD;&#x6570;&#x3002;&#x751F;&#x6210;&#x5982;&#x4E0B;&#x7C7B;&#x578B;&#x6784;&#x9020;&#x51FD;&#x6570;&#xFF1A;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token function">Derived</span><span class="token punctuation">(</span>parms<span class="token punctuation">)</span> <span class="token operator">:</span> <span class="token function">Base</span><span class="token punctuation">(</span>args<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span>
</pre><h4 class="mume-header" id="using-%E6%8C%87%E7%A4%BA">using &#x6307;&#x793A;</h4>

<p><code>using &#x6307;&#x793A;</code> &#x4F7F;&#x5F97;&#x67D0;&#x4E2A;&#x7279;&#x5B9A;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x4E2D;&#x6240;&#x6709;&#x540D;&#x5B57;&#x90FD;&#x53EF;&#x89C1;&#xFF0C;&#x8FD9;&#x6837;&#x6211;&#x4EEC;&#x5C31;&#x65E0;&#x9700;&#x518D;&#x4E3A;&#x5B83;&#x4EEC;&#x6DFB;&#x52A0;&#x4EFB;&#x4F55;&#x524D;&#x7F00;&#x9650;&#x5B9A;&#x7B26;&#x4E86;&#x3002;&#x5982;&#xFF1A;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">using</span> namespace_name name<span class="token punctuation">;</span>
</pre><h4 class="mume-header" id="%E5%B0%BD%E9%87%8F%E5%B0%91%E4%BD%BF%E7%94%A8-using-%E6%8C%87%E7%A4%BA-%E6%B1%A1%E6%9F%93%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4">&#x5C3D;&#x91CF;&#x5C11;&#x4F7F;&#x7528; <code>using &#x6307;&#x793A;</code> &#x6C61;&#x67D3;&#x547D;&#x540D;&#x7A7A;&#x95F4;</h4>

<blockquote>
<p>&#x4E00;&#x822C;&#x8BF4;&#x6765;&#xFF0C;&#x4F7F;&#x7528; using &#x547D;&#x4EE4;&#x6BD4;&#x4F7F;&#x7528; using &#x7F16;&#x8BD1;&#x547D;&#x4EE4;&#x66F4;&#x5B89;&#x5168;&#xFF0C;&#x8FD9;&#x662F;&#x7531;&#x4E8E;&#x5B83;<strong>&#x53EA;&#x5BFC;&#x5165;&#x4E86;&#x6307;&#x5B9A;&#x7684;&#x540D;&#x79F0;</strong>&#x3002;&#x5982;&#x679C;&#x8BE5;&#x540D;&#x79F0;&#x4E0E;&#x5C40;&#x90E8;&#x540D;&#x79F0;&#x53D1;&#x751F;&#x51B2;&#x7A81;&#xFF0C;&#x7F16;&#x8BD1;&#x5668;&#x5C06;<strong>&#x53D1;&#x51FA;&#x6307;&#x793A;</strong>&#x3002;using&#x7F16;&#x8BD1;&#x547D;&#x4EE4;&#x5BFC;&#x5165;&#x6240;&#x6709;&#x7684;&#x540D;&#x79F0;&#xFF0C;&#x5305;&#x62EC;&#x53EF;&#x80FD;&#x5E76;&#x4E0D;&#x9700;&#x8981;&#x7684;&#x540D;&#x79F0;&#x3002;&#x5982;&#x679C;&#x4E0E;&#x5C40;&#x90E8;&#x540D;&#x79F0;&#x53D1;&#x751F;&#x51B2;&#x7A81;&#xFF0C;&#x5219;<strong>&#x5C40;&#x90E8;&#x540D;&#x79F0;&#x5C06;&#x8986;&#x76D6;&#x540D;&#x79F0;&#x7A7A;&#x95F4;&#x7248;&#x672C;</strong>&#xFF0C;&#x800C;&#x7F16;&#x8BD1;&#x5668;<strong>&#x5E76;&#x4E0D;&#x4F1A;&#x53D1;&#x51FA;&#x8B66;&#x544A;</strong>&#x3002;&#x53E6;&#x5916;&#xFF0C;&#x540D;&#x79F0;&#x7A7A;&#x95F4;&#x7684;&#x5F00;&#x653E;&#x6027;&#x610F;&#x5473;&#x7740;&#x540D;&#x79F0;&#x7A7A;&#x95F4;&#x7684;&#x540D;&#x79F0;&#x53EF;&#x80FD;&#x5206;&#x6563;&#x5728;&#x591A;&#x4E2A;&#x5730;&#x65B9;&#xFF0C;&#x8FD9;&#x4F7F;&#x5F97;&#x96BE;&#x4EE5;&#x51C6;&#x786E;&#x77E5;&#x9053;&#x6DFB;&#x52A0;&#x4E86;&#x54EA;&#x4E9B;&#x540D;&#x79F0;&#x3002;</p>
</blockquote>
<p>using &#x4F7F;&#x7528;</p>
<p>&#x5C3D;&#x91CF;&#x5C11;&#x4F7F;&#x7528; <code>using &#x6307;&#x793A;</code></p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span>
</pre><p>&#x5E94;&#x8BE5;&#x591A;&#x4F7F;&#x7528; <code>using &#x58F0;&#x660E;</code></p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">int</span> x<span class="token punctuation">;</span>
std<span class="token operator">::</span>cin <span class="token operator">&gt;&gt;</span> x <span class="token punctuation">;</span>
std<span class="token operator">::</span>cout <span class="token operator">&lt;&lt;</span> x <span class="token operator">&lt;&lt;</span> std<span class="token operator">::</span>endl<span class="token punctuation">;</span>
</pre><p>&#x6216;&#x8005;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">using</span> std<span class="token operator">::</span>cin<span class="token punctuation">;</span>
<span class="token keyword">using</span> std<span class="token operator">::</span>cout<span class="token punctuation">;</span>
<span class="token keyword">using</span> std<span class="token operator">::</span>endl<span class="token punctuation">;</span>
<span class="token keyword">int</span> x<span class="token punctuation">;</span>
cin <span class="token operator">&gt;&gt;</span> x<span class="token punctuation">;</span>
cout <span class="token operator">&lt;&lt;</span> x <span class="token operator">&lt;&lt;</span> endl<span class="token punctuation">;</span>
</pre><h3 class="mume-header" id="%E8%8C%83%E5%9B%B4%E8%A7%A3%E6%9E%90%E8%BF%90%E7%AE%97%E7%AC%A6">:: &#x8303;&#x56F4;&#x89E3;&#x6790;&#x8FD0;&#x7B97;&#x7B26;</h3>

<h4 class="mume-header" id="%E5%88%86%E7%B1%BB">&#x5206;&#x7C7B;</h4>

<ol>
<li>&#x5168;&#x5C40;&#x4F5C;&#x7528;&#x57DF;&#x7B26;&#xFF08;<code>::name</code>&#xFF09;&#xFF1A;&#x7528;&#x4E8E;&#x7C7B;&#x578B;&#x540D;&#x79F0;&#xFF08;&#x7C7B;&#x3001;&#x7C7B;&#x6210;&#x5458;&#x3001;&#x6210;&#x5458;&#x51FD;&#x6570;&#x3001;&#x53D8;&#x91CF;&#x7B49;&#xFF09;&#x524D;&#xFF0C;&#x8868;&#x793A;&#x4F5C;&#x7528;&#x57DF;&#x4E3A;&#x5168;&#x5C40;&#x547D;&#x540D;&#x7A7A;&#x95F4;</li>
<li>&#x7C7B;&#x4F5C;&#x7528;&#x57DF;&#x7B26;&#xFF08;<code>class::name</code>&#xFF09;&#xFF1A;&#x7528;&#x4E8E;&#x8868;&#x793A;&#x6307;&#x5B9A;&#x7C7B;&#x578B;&#x7684;&#x4F5C;&#x7528;&#x57DF;&#x8303;&#x56F4;&#x662F;&#x5177;&#x4F53;&#x67D0;&#x4E2A;&#x7C7B;&#x7684;</li>
<li>&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x4F5C;&#x7528;&#x57DF;&#x7B26;&#xFF08;<code>namespace::name</code>&#xFF09;:&#x7528;&#x4E8E;&#x8868;&#x793A;&#x6307;&#x5B9A;&#x7C7B;&#x578B;&#x7684;&#x4F5C;&#x7528;&#x57DF;&#x8303;&#x56F4;&#x662F;&#x5177;&#x4F53;&#x67D0;&#x4E2A;&#x547D;&#x540D;&#x7A7A;&#x95F4;&#x7684;</li>
</ol>
<p>:: &#x4F7F;&#x7528;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">int</span> count <span class="token operator">=</span> <span class="token number">11</span><span class="token punctuation">;</span>         <span class="token comment">// &#x5168;&#x5C40;&#xFF08;::&#xFF09;&#x7684; count</span>

<span class="token keyword">class</span> <span class="token class-name">A</span> <span class="token punctuation">{</span>
<span class="token keyword">public</span><span class="token operator">:</span>
	<span class="token keyword">static</span> <span class="token keyword">int</span> count<span class="token punctuation">;</span>   <span class="token comment">// &#x7C7B; A &#x7684; count&#xFF08;A::count&#xFF09;</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token keyword">int</span> A<span class="token operator">::</span>count <span class="token operator">=</span> <span class="token number">21</span><span class="token punctuation">;</span>

<span class="token keyword">void</span> <span class="token function">fun</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
	<span class="token keyword">int</span> count <span class="token operator">=</span> <span class="token number">31</span><span class="token punctuation">;</span>     <span class="token comment">// &#x521D;&#x59CB;&#x5316;&#x5C40;&#x90E8;&#x7684; count &#x4E3A; 31</span>
	count <span class="token operator">=</span> <span class="token number">32</span><span class="token punctuation">;</span>         <span class="token comment">// &#x8BBE;&#x7F6E;&#x5C40;&#x90E8;&#x7684; count &#x7684;&#x503C;&#x4E3A; 32</span>
<span class="token punctuation">}</span>

<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
	<span class="token operator">::</span>count <span class="token operator">=</span> <span class="token number">12</span><span class="token punctuation">;</span>       <span class="token comment">// &#x6D4B;&#x8BD5; 1&#xFF1A;&#x8BBE;&#x7F6E;&#x5168;&#x5C40;&#x7684; count &#x7684;&#x503C;&#x4E3A; 12</span>

	A<span class="token operator">::</span>count <span class="token operator">=</span> <span class="token number">22</span><span class="token punctuation">;</span>      <span class="token comment">// &#x6D4B;&#x8BD5; 2&#xFF1A;&#x8BBE;&#x7F6E;&#x7C7B; A &#x7684; count &#x4E3A; 22</span>

	<span class="token function">fun</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>		        <span class="token comment">// &#x6D4B;&#x8BD5; 3</span>

	<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</pre><h3 class="mume-header" id="enum-%E6%9E%9A%E4%B8%BE%E7%B1%BB%E5%9E%8B">enum &#x679A;&#x4E3E;&#x7C7B;&#x578B;</h3>

<h4 class="mume-header" id="%E9%99%90%E5%AE%9A%E4%BD%9C%E7%94%A8%E5%9F%9F%E7%9A%84%E6%9E%9A%E4%B8%BE%E7%B1%BB%E5%9E%8B">&#x9650;&#x5B9A;&#x4F5C;&#x7528;&#x57DF;&#x7684;&#x679A;&#x4E3E;&#x7C7B;&#x578B;</h4>

<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">enum</span> <span class="token keyword">class</span> <span class="token class-name">open_modes</span> <span class="token punctuation">{</span> input<span class="token punctuation">,</span> output<span class="token punctuation">,</span> append <span class="token punctuation">}</span><span class="token punctuation">;</span>
</pre><h4 class="mume-header" id="%E4%B8%8D%E9%99%90%E5%AE%9A%E4%BD%9C%E7%94%A8%E5%9F%9F%E7%9A%84%E6%9E%9A%E4%B8%BE%E7%B1%BB%E5%9E%8B">&#x4E0D;&#x9650;&#x5B9A;&#x4F5C;&#x7528;&#x57DF;&#x7684;&#x679A;&#x4E3E;&#x7C7B;&#x578B;</h4>

<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">enum</span> <span class="token class-name">color</span> <span class="token punctuation">{</span> red<span class="token punctuation">,</span> yellow<span class="token punctuation">,</span> green <span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token keyword">enum</span> <span class="token punctuation">{</span> floatPrec <span class="token operator">=</span> <span class="token number">6</span><span class="token punctuation">,</span> doublePrec <span class="token operator">=</span> <span class="token number">10</span> <span class="token punctuation">}</span><span class="token punctuation">;</span>
</pre><h3 class="mume-header" id="decltype">decltype</h3>

<p>decltype &#x5173;&#x952E;&#x5B57;&#x7528;&#x4E8E;&#x68C0;&#x67E5;&#x5B9E;&#x4F53;&#x7684;&#x58F0;&#x660E;&#x7C7B;&#x578B;&#x6216;&#x8868;&#x8FBE;&#x5F0F;&#x7684;&#x7C7B;&#x578B;&#x53CA;&#x503C;&#x5206;&#x7C7B;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">decltype</span> <span class="token punctuation">(</span> expression <span class="token punctuation">)</span>
</pre><p>decltype &#x4F7F;&#x7528;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token comment">// &#x5C3E;&#x7F6E;&#x8FD4;&#x56DE;&#x5141;&#x8BB8;&#x6211;&#x4EEC;&#x5728;&#x53C2;&#x6570;&#x5217;&#x8868;&#x4E4B;&#x540E;&#x58F0;&#x660E;&#x8FD4;&#x56DE;&#x7C7B;&#x578B;</span>
<span class="token keyword">template</span> <span class="token operator">&lt;</span><span class="token keyword">typename</span> <span class="token class-name">It</span><span class="token operator">&gt;</span>
<span class="token keyword">auto</span> <span class="token function">fcn</span><span class="token punctuation">(</span>It beg<span class="token punctuation">,</span> It end<span class="token punctuation">)</span> <span class="token operator">-&gt;</span> <span class="token keyword">decltype</span><span class="token punctuation">(</span><span class="token operator">*</span>beg<span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    <span class="token comment">// &#x5904;&#x7406;&#x5E8F;&#x5217;</span>
    <span class="token keyword">return</span> <span class="token operator">*</span>beg<span class="token punctuation">;</span>    <span class="token comment">// &#x8FD4;&#x56DE;&#x5E8F;&#x5217;&#x4E2D;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#x7684;&#x5F15;&#x7528;</span>
<span class="token punctuation">}</span>
<span class="token comment">// &#x4E3A;&#x4E86;&#x4F7F;&#x7528;&#x6A21;&#x677F;&#x53C2;&#x6570;&#x6210;&#x5458;&#xFF0C;&#x5FC5;&#x987B;&#x7528; typename</span>
<span class="token keyword">template</span> <span class="token operator">&lt;</span><span class="token keyword">typename</span> <span class="token class-name">It</span><span class="token operator">&gt;</span>
<span class="token keyword">auto</span> <span class="token function">fcn2</span><span class="token punctuation">(</span>It beg<span class="token punctuation">,</span> It end<span class="token punctuation">)</span> <span class="token operator">-&gt;</span> <span class="token keyword">typename</span> <span class="token class-name">remove_reference</span><span class="token operator">&lt;</span><span class="token keyword">decltype</span><span class="token punctuation">(</span><span class="token operator">*</span>beg<span class="token punctuation">)</span><span class="token operator">&gt;</span><span class="token operator">::</span>type
<span class="token punctuation">{</span>
    <span class="token comment">// &#x5904;&#x7406;&#x5E8F;&#x5217;</span>
    <span class="token keyword">return</span> <span class="token operator">*</span>beg<span class="token punctuation">;</span>    <span class="token comment">// &#x8FD4;&#x56DE;&#x5E8F;&#x5217;&#x4E2D;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#x7684;&#x62F7;&#x8D1D;</span>
<span class="token punctuation">}</span>
</pre><h3 class="mume-header" id="%E5%BC%95%E7%94%A8">&#x5F15;&#x7528;</h3>

<h4 class="mume-header" id="%E5%B7%A6%E5%80%BC%E5%BC%95%E7%94%A8">&#x5DE6;&#x503C;&#x5F15;&#x7528;</h4>

<p>&#x5E38;&#x89C4;&#x5F15;&#x7528;&#xFF0C;&#x4E00;&#x822C;&#x8868;&#x793A;&#x5BF9;&#x8C61;&#x7684;&#x8EAB;&#x4EFD;&#x3002;</p>
<h4 class="mume-header" id="%E5%8F%B3%E5%80%BC%E5%BC%95%E7%94%A8">&#x53F3;&#x503C;&#x5F15;&#x7528;</h4>

<p>&#x53F3;&#x503C;&#x5F15;&#x7528;&#x5C31;&#x662F;&#x5FC5;&#x987B;&#x7ED1;&#x5B9A;&#x5230;&#x53F3;&#x503C;&#xFF08;&#x4E00;&#x4E2A;&#x4E34;&#x65F6;&#x5BF9;&#x8C61;&#x3001;&#x5C06;&#x8981;&#x9500;&#x6BC1;&#x7684;&#x5BF9;&#x8C61;&#xFF09;&#x7684;&#x5F15;&#x7528;&#xFF0C;&#x4E00;&#x822C;&#x8868;&#x793A;&#x5BF9;&#x8C61;&#x7684;&#x503C;&#x3002;</p>
<p>&#x53F3;&#x503C;&#x5F15;&#x7528;&#x53EF;&#x5B9E;&#x73B0;&#x8F6C;&#x79FB;&#x8BED;&#x4E49;&#xFF08;Move Sementics&#xFF09;&#x548C;&#x7CBE;&#x786E;&#x4F20;&#x9012;&#xFF08;Perfect Forwarding&#xFF09;&#xFF0C;&#x5B83;&#x7684;&#x4E3B;&#x8981;&#x76EE;&#x7684;&#x6709;&#x4E24;&#x4E2A;&#x65B9;&#x9762;&#xFF1A;</p>
<ul>
<li>&#x6D88;&#x9664;&#x4E24;&#x4E2A;&#x5BF9;&#x8C61;&#x4EA4;&#x4E92;&#x65F6;&#x4E0D;&#x5FC5;&#x8981;&#x7684;&#x5BF9;&#x8C61;&#x62F7;&#x8D1D;&#xFF0C;&#x8282;&#x7701;&#x8FD0;&#x7B97;&#x5B58;&#x50A8;&#x8D44;&#x6E90;&#xFF0C;&#x63D0;&#x9AD8;&#x6548;&#x7387;&#x3002;</li>
<li>&#x80FD;&#x591F;&#x66F4;&#x7B80;&#x6D01;&#x660E;&#x786E;&#x5730;&#x5B9A;&#x4E49;&#x6CDB;&#x578B;&#x51FD;&#x6570;&#x3002;</li>
</ul>
<h4 class="mume-header" id="%E5%BC%95%E7%94%A8%E6%8A%98%E5%8F%A0">&#x5F15;&#x7528;&#x6298;&#x53E0;</h4>

<ul>
<li><code>X&amp; &amp;</code>&#x3001;<code>X&amp; &amp;&amp;</code>&#x3001;<code>X&amp;&amp; &amp;</code> &#x53EF;&#x6298;&#x53E0;&#x6210; <code>X&amp;</code></li>
<li><code>X&amp;&amp; &amp;&amp;</code> &#x53EF;&#x6298;&#x53E0;&#x6210; <code>X&amp;&amp;</code></li>
</ul>
<h3 class="mume-header" id="%E5%AE%8F">&#x5B8F;</h3>

<ul>
<li>&#x5B8F;&#x5B9A;&#x4E49;&#x53EF;&#x4EE5;&#x5B9E;&#x73B0;&#x7C7B;&#x4F3C;&#x4E8E;&#x51FD;&#x6570;&#x7684;&#x529F;&#x80FD;&#xFF0C;&#x4F46;&#x662F;&#x5B83;&#x7EC8;&#x5F52;&#x4E0D;&#x662F;&#x51FD;&#x6570;&#xFF0C;&#x800C;&#x5B8F;&#x5B9A;&#x4E49;&#x4E2D;&#x62EC;&#x5F27;&#x4E2D;&#x7684;&#x201C;&#x53C2;&#x6570;&#x201D;&#x4E5F;&#x4E0D;&#x662F;&#x771F;&#x7684;&#x53C2;&#x6570;&#xFF0C;&#x5728;&#x5B8F;&#x5C55;&#x5F00;&#x7684;&#x65F6;&#x5019;&#x5BF9; &#x201C;&#x53C2;&#x6570;&#x201D; &#x8FDB;&#x884C;&#x7684;&#x662F;&#x4E00;&#x5BF9;&#x4E00;&#x7684;&#x66FF;&#x6362;&#x3002;</li>
</ul>
<h3 class="mume-header" id="%E6%88%90%E5%91%98%E5%88%9D%E5%A7%8B%E5%8C%96%E5%88%97%E8%A1%A8">&#x6210;&#x5458;&#x521D;&#x59CB;&#x5316;&#x5217;&#x8868;</h3>

<p>&#x597D;&#x5904;</p>
<ul>
<li>&#x66F4;&#x9AD8;&#x6548;&#xFF1A;&#x5C11;&#x4E86;&#x4E00;&#x6B21;&#x8C03;&#x7528;&#x9ED8;&#x8BA4;&#x6784;&#x9020;&#x51FD;&#x6570;&#x7684;&#x8FC7;&#x7A0B;&#x3002;</li>
<li>&#x6709;&#x4E9B;&#x573A;&#x5408;&#x5FC5;&#x987B;&#x8981;&#x7528;&#x521D;&#x59CB;&#x5316;&#x5217;&#x8868;&#xFF1A;
<ol>
<li>&#x5E38;&#x91CF;&#x6210;&#x5458;&#xFF0C;&#x56E0;&#x4E3A;&#x5E38;&#x91CF;&#x53EA;&#x80FD;&#x521D;&#x59CB;&#x5316;&#x4E0D;&#x80FD;&#x8D4B;&#x503C;&#xFF0C;&#x6240;&#x4EE5;&#x5FC5;&#x987B;&#x653E;&#x5728;&#x521D;&#x59CB;&#x5316;&#x5217;&#x8868;&#x91CC;&#x9762;</li>
<li>&#x5F15;&#x7528;&#x7C7B;&#x578B;&#xFF0C;&#x5F15;&#x7528;&#x5FC5;&#x987B;&#x5728;&#x5B9A;&#x4E49;&#x7684;&#x65F6;&#x5019;&#x521D;&#x59CB;&#x5316;&#xFF0C;&#x5E76;&#x4E14;&#x4E0D;&#x80FD;&#x91CD;&#x65B0;&#x8D4B;&#x503C;&#xFF0C;&#x6240;&#x4EE5;&#x4E5F;&#x8981;&#x5199;&#x5728;&#x521D;&#x59CB;&#x5316;&#x5217;&#x8868;&#x91CC;&#x9762;</li>
<li>&#x6CA1;&#x6709;&#x9ED8;&#x8BA4;&#x6784;&#x9020;&#x51FD;&#x6570;&#x7684;&#x7C7B;&#x7C7B;&#x578B;&#xFF0C;&#x56E0;&#x4E3A;&#x4F7F;&#x7528;&#x521D;&#x59CB;&#x5316;&#x5217;&#x8868;&#x53EF;&#x4EE5;&#x4E0D;&#x5FC5;&#x8C03;&#x7528;&#x9ED8;&#x8BA4;&#x6784;&#x9020;&#x51FD;&#x6570;&#x6765;&#x521D;&#x59CB;&#x5316;</li>
</ol>
</li>
</ul>
<h3 class="mume-header" id="initializer_list-%E5%88%97%E8%A1%A8%E5%88%9D%E5%A7%8B%E5%8C%96">initializer_list &#x5217;&#x8868;&#x521D;&#x59CB;&#x5316;</h3>

<p>&#x7528;&#x82B1;&#x62EC;&#x53F7;&#x521D;&#x59CB;&#x5316;&#x5668;&#x5217;&#x8868;&#x521D;&#x59CB;&#x5316;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#xFF0C;&#x5176;&#x4E2D;&#x5BF9;&#x5E94;&#x6784;&#x9020;&#x51FD;&#x6570;&#x63A5;&#x53D7;&#x4E00;&#x4E2A; <code>std::initializer_list</code> &#x53C2;&#x6570;.</p>
<p>initializer_list &#x4F7F;&#x7528;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;iostream&gt;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;vector&gt;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;initializer_list&gt;</span></span>
 
<span class="token keyword">template</span> <span class="token operator">&lt;</span><span class="token keyword">class</span> <span class="token class-name">T</span><span class="token operator">&gt;</span>
<span class="token keyword">struct</span> <span class="token class-name">S</span> <span class="token punctuation">{</span>
    std<span class="token operator">::</span>vector<span class="token operator">&lt;</span>T<span class="token operator">&gt;</span> v<span class="token punctuation">;</span>
    <span class="token function">S</span><span class="token punctuation">(</span>std<span class="token operator">::</span>initializer_list<span class="token operator">&lt;</span>T<span class="token operator">&gt;</span> l<span class="token punctuation">)</span> <span class="token operator">:</span> <span class="token function">v</span><span class="token punctuation">(</span>l<span class="token punctuation">)</span> <span class="token punctuation">{</span>
         std<span class="token operator">::</span>cout <span class="token operator">&lt;&lt;</span> <span class="token string">&quot;constructed with a &quot;</span> <span class="token operator">&lt;&lt;</span> l<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">&lt;&lt;</span> <span class="token string">&quot;-element list\n&quot;</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">void</span> <span class="token function">append</span><span class="token punctuation">(</span>std<span class="token operator">::</span>initializer_list<span class="token operator">&lt;</span>T<span class="token operator">&gt;</span> l<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        v<span class="token punctuation">.</span><span class="token function">insert</span><span class="token punctuation">(</span>v<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> l<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> l<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    std<span class="token operator">::</span>pair<span class="token operator">&lt;</span><span class="token keyword">const</span> T<span class="token operator">*</span><span class="token punctuation">,</span> std<span class="token operator">::</span>size_t<span class="token operator">&gt;</span> <span class="token function">c_arr</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">const</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> <span class="token punctuation">{</span><span class="token operator">&amp;</span>v<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> v<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">}</span><span class="token punctuation">;</span>  <span class="token comment">// &#x5728; return &#x8BED;&#x53E5;&#x4E2D;&#x590D;&#x5236;&#x5217;&#x8868;&#x521D;&#x59CB;&#x5316;</span>
                                   <span class="token comment">// &#x8FD9;&#x4E0D;&#x4F7F;&#x7528; std::initializer_list</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
 
<span class="token keyword">template</span> <span class="token operator">&lt;</span><span class="token keyword">typename</span> <span class="token class-name">T</span><span class="token operator">&gt;</span>
<span class="token keyword">void</span> <span class="token function">templated_fn</span><span class="token punctuation">(</span>T<span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
 
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    S<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">&gt;</span> s <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token comment">// &#x590D;&#x5236;&#x521D;&#x59CB;&#x5316;</span>
    s<span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>      <span class="token comment">// &#x51FD;&#x6570;&#x8C03;&#x7528;&#x4E2D;&#x7684;&#x5217;&#x8868;&#x521D;&#x59CB;&#x5316;</span>
 
    std<span class="token operator">::</span>cout <span class="token operator">&lt;&lt;</span> <span class="token string">&quot;The vector size is now &quot;</span> <span class="token operator">&lt;&lt;</span> s<span class="token punctuation">.</span><span class="token function">c_arr</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>second <span class="token operator">&lt;&lt;</span> <span class="token string">&quot; ints:\n&quot;</span><span class="token punctuation">;</span>
 
    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">auto</span> n <span class="token operator">:</span> s<span class="token punctuation">.</span>v<span class="token punctuation">)</span>
        std<span class="token operator">::</span>cout <span class="token operator">&lt;&lt;</span> n <span class="token operator">&lt;&lt;</span> <span class="token string">&apos; &apos;</span><span class="token punctuation">;</span>
    std<span class="token operator">::</span>cout <span class="token operator">&lt;&lt;</span> <span class="token string">&apos;\n&apos;</span><span class="token punctuation">;</span>
 
    std<span class="token operator">::</span>cout <span class="token operator">&lt;&lt;</span> <span class="token string">&quot;Range-for over brace-init-list: \n&quot;</span><span class="token punctuation">;</span>
 
    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> x <span class="token operator">:</span> <span class="token punctuation">{</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">3</span><span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token comment">// auto &#x7684;&#x89C4;&#x5219;&#x4EE4;&#x6B64;&#x5E26;&#x8303;&#x56F4; for &#x5DE5;&#x4F5C;</span>
        std<span class="token operator">::</span>cout <span class="token operator">&lt;&lt;</span> x <span class="token operator">&lt;&lt;</span> <span class="token string">&apos; &apos;</span><span class="token punctuation">;</span>
    std<span class="token operator">::</span>cout <span class="token operator">&lt;&lt;</span> <span class="token string">&apos;\n&apos;</span><span class="token punctuation">;</span>
 
    <span class="token keyword">auto</span> al <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">}</span><span class="token punctuation">;</span>   <span class="token comment">// auto &#x7684;&#x7279;&#x6B8A;&#x89C4;&#x5219;</span>
 
    std<span class="token operator">::</span>cout <span class="token operator">&lt;&lt;</span> <span class="token string">&quot;The list bound to auto has size() = &quot;</span> <span class="token operator">&lt;&lt;</span> al<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">&lt;&lt;</span> <span class="token string">&apos;\n&apos;</span><span class="token punctuation">;</span>
 
<span class="token comment">//    templated_fn({1, 2, 3}); // &#x7F16;&#x8BD1;&#x9519;&#x8BEF;&#xFF01;&#x201C; {1, 2, 3} &#x201D;&#x4E0D;&#x662F;&#x8868;&#x8FBE;&#x5F0F;&#xFF0C;</span>
                             <span class="token comment">// &#x5B83;&#x65E0;&#x7C7B;&#x578B;&#xFF0C;&#x6545; T &#x65E0;&#x6CD5;&#x63A8;&#x5BFC;</span>
    templated_fn<span class="token operator">&lt;</span>std<span class="token operator">::</span>initializer_list<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">&gt;&gt;</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// OK</span>
    templated_fn<span class="token operator">&lt;</span>std<span class="token operator">::</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">&gt;&gt;</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>           <span class="token comment">// &#x4E5F; OK</span>
<span class="token punctuation">}</span>
</pre><h3 class="mume-header" id="%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1">&#x9762;&#x5411;&#x5BF9;&#x8C61;</h3>

<p>&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x7A0B;&#x5E8F;&#x8BBE;&#x8BA1;&#xFF08;Object-oriented programming&#xFF0C;OOP&#xFF09;&#x662F;&#x79CD;&#x5177;&#x6709;&#x5BF9;&#x8C61;&#x6982;&#x5FF5;&#x7684;&#x7A0B;&#x5E8F;&#x7F16;&#x7A0B;&#x5178;&#x8303;&#xFF0C;&#x540C;&#x65F6;&#x4E5F;&#x662F;&#x4E00;&#x79CD;&#x7A0B;&#x5E8F;&#x5F00;&#x53D1;&#x7684;&#x62BD;&#x8C61;&#x65B9;&#x9488;&#x3002;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E5%9F%BA%E6%9C%AC%E7%89%B9%E5%BE%81.png" alt="&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x7279;&#x5F81;"></p>
<p>&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x4E09;&#x5927;&#x7279;&#x5F81; &#x2014;&#x2014; &#x5C01;&#x88C5;&#x3001;&#x7EE7;&#x627F;&#x3001;&#x591A;&#x6001;</p>
<h3 class="mume-header" id="%E5%B0%81%E8%A3%85">&#x5C01;&#x88C5;</h3>

<p>&#x628A;&#x5BA2;&#x89C2;&#x4E8B;&#x7269;&#x5C01;&#x88C5;&#x6210;&#x62BD;&#x8C61;&#x7684;&#x7C7B;&#xFF0C;&#x5E76;&#x4E14;&#x7C7B;&#x53EF;&#x4EE5;&#x628A;&#x81EA;&#x5DF1;&#x7684;&#x6570;&#x636E;&#x548C;&#x65B9;&#x6CD5;&#x53EA;&#x8BA9;&#x53EF;&#x4FE1;&#x7684;&#x7C7B;&#x6216;&#x8005;&#x5BF9;&#x8C61;&#x64CD;&#x4F5C;&#xFF0C;&#x5BF9;&#x4E0D;&#x53EF;&#x4FE1;&#x7684;&#x8FDB;&#x884C;&#x4FE1;&#x606F;&#x9690;&#x85CF;&#x3002;&#x5173;&#x952E;&#x5B57;&#xFF1A;public, protected, private&#x3002;&#x4E0D;&#x5199;&#x9ED8;&#x8BA4;&#x4E3A; private&#x3002;</p>
<ul>
<li><code>public</code> &#x6210;&#x5458;&#xFF1A;&#x53EF;&#x4EE5;&#x88AB;&#x4EFB;&#x610F;&#x5B9E;&#x4F53;&#x8BBF;&#x95EE;</li>
<li><code>protected</code> &#x6210;&#x5458;&#xFF1A;&#x53EA;&#x5141;&#x8BB8;&#x88AB;&#x5B50;&#x7C7B;&#x53CA;&#x672C;&#x7C7B;&#x7684;&#x6210;&#x5458;&#x51FD;&#x6570;&#x8BBF;&#x95EE;</li>
<li><code>private</code> &#x6210;&#x5458;&#xFF1A;&#x53EA;&#x5141;&#x8BB8;&#x88AB;&#x672C;&#x7C7B;&#x7684;&#x6210;&#x5458;&#x51FD;&#x6570;&#x3001;&#x53CB;&#x5143;&#x7C7B;&#x6216;&#x53CB;&#x5143;&#x51FD;&#x6570;&#x8BBF;&#x95EE;</li>
</ul>
<h3 class="mume-header" id="%E7%BB%A7%E6%89%BF">&#x7EE7;&#x627F;</h3>

<ul>
<li>&#x57FA;&#x7C7B;&#xFF08;&#x7236;&#x7C7B;&#xFF09;&#x2014;&#x2014;&gt; &#x6D3E;&#x751F;&#x7C7B;&#xFF08;&#x5B50;&#x7C7B;&#xFF09;</li>
</ul>
<h3 class="mume-header" id="%E5%A4%9A%E6%80%81">&#x591A;&#x6001;</h3>

<ul>
<li>&#x591A;&#x6001;&#xFF0C;&#x5373;&#x591A;&#x79CD;&#x72B6;&#x6001;&#xFF08;&#x5F62;&#x6001;&#xFF09;&#x3002;&#x7B80;&#x5355;&#x6765;&#x8BF4;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5C06;&#x591A;&#x6001;&#x5B9A;&#x4E49;&#x4E3A;&#x6D88;&#x606F;&#x4EE5;&#x591A;&#x79CD;&#x5F62;&#x5F0F;&#x663E;&#x793A;&#x7684;&#x80FD;&#x529B;&#x3002;</li>
<li>&#x591A;&#x6001;&#x662F;&#x4EE5;&#x5C01;&#x88C5;&#x548C;&#x7EE7;&#x627F;&#x4E3A;&#x57FA;&#x7840;&#x7684;&#x3002;</li>
<li>C++ &#x591A;&#x6001;&#x5206;&#x7C7B;&#x53CA;&#x5B9E;&#x73B0;&#xFF1A;
<ol>
<li>&#x91CD;&#x8F7D;&#x591A;&#x6001;&#xFF08;Ad-hoc Polymorphism&#xFF0C;&#x7F16;&#x8BD1;&#x671F;&#xFF09;&#xFF1A;&#x51FD;&#x6570;&#x91CD;&#x8F7D;&#x3001;&#x8FD0;&#x7B97;&#x7B26;&#x91CD;&#x8F7D;</li>
<li>&#x5B50;&#x7C7B;&#x578B;&#x591A;&#x6001;&#xFF08;Subtype Polymorphism&#xFF0C;&#x8FD0;&#x884C;&#x671F;&#xFF09;&#xFF1A;&#x865A;&#x51FD;&#x6570;</li>
<li>&#x53C2;&#x6570;&#x591A;&#x6001;&#x6027;&#xFF08;Parametric Polymorphism&#xFF0C;&#x7F16;&#x8BD1;&#x671F;&#xFF09;&#xFF1A;&#x7C7B;&#x6A21;&#x677F;&#x3001;&#x51FD;&#x6570;&#x6A21;&#x677F;</li>
<li>&#x5F3A;&#x5236;&#x591A;&#x6001;&#xFF08;Coercion Polymorphism&#xFF0C;&#x7F16;&#x8BD1;&#x671F;/&#x8FD0;&#x884C;&#x671F;&#xFF09;&#xFF1A;&#x57FA;&#x672C;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x3001;&#x81EA;&#x5B9A;&#x4E49;&#x7C7B;&#x578B;&#x8F6C;&#x6362;</li>
</ol>
</li>
</ul>
<blockquote>
<p><a href="https://catonmat.net/cpp-polymorphism">The Four Polymorphisms in C++</a></p>
</blockquote>
<h4 class="mume-header" id="%E9%9D%99%E6%80%81%E5%A4%9A%E6%80%81%E7%BC%96%E8%AF%91%E6%9C%9F%E6%97%A9%E7%BB%91%E5%AE%9A">&#x9759;&#x6001;&#x591A;&#x6001;&#xFF08;&#x7F16;&#x8BD1;&#x671F;/&#x65E9;&#x7ED1;&#x5B9A;&#xFF09;</h4>

<p>&#x51FD;&#x6570;&#x91CD;&#x8F7D;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">A</span>
<span class="token punctuation">{</span>
<span class="token keyword">public</span><span class="token operator">:</span>
    <span class="token keyword">void</span> <span class="token keyword">do</span><span class="token punctuation">(</span><span class="token keyword">int</span> a<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">void</span> <span class="token keyword">do</span><span class="token punctuation">(</span><span class="token keyword">int</span> a<span class="token punctuation">,</span> <span class="token keyword">int</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
</pre><h4 class="mume-header" id="%E5%8A%A8%E6%80%81%E5%A4%9A%E6%80%81%E8%BF%90%E8%A1%8C%E6%9C%9F%E6%9C%9F%E6%99%9A%E7%BB%91%E5%AE%9A">&#x52A8;&#x6001;&#x591A;&#x6001;&#xFF08;&#x8FD0;&#x884C;&#x671F;&#x671F;/&#x665A;&#x7ED1;&#x5B9A;&#xFF09;</h4>

<ul>
<li>&#x865A;&#x51FD;&#x6570;&#xFF1A;&#x7528; virtual &#x4FEE;&#x9970;&#x6210;&#x5458;&#x51FD;&#x6570;&#xFF0C;&#x4F7F;&#x5176;&#x6210;&#x4E3A;&#x865A;&#x51FD;&#x6570;</li>
<li>&#x52A8;&#x6001;&#x7ED1;&#x5B9A;&#xFF1A;&#x5F53;&#x4F7F;&#x7528;&#x57FA;&#x7C7B;&#x7684;&#x5F15;&#x7528;&#x6216;&#x6307;&#x9488;&#x8C03;&#x7528;&#x4E00;&#x4E2A;&#x865A;&#x51FD;&#x6570;&#x65F6;&#x5C06;&#x53D1;&#x751F;&#x52A8;&#x6001;&#x7ED1;&#x5B9A;</li>
</ul>
<p><strong>&#x6CE8;&#x610F;&#xFF1A;</strong></p>
<ul>
<li>&#x53EF;&#x4EE5;&#x5C06;&#x6D3E;&#x751F;&#x7C7B;&#x7684;&#x5BF9;&#x8C61;&#x8D4B;&#x503C;&#x7ED9;&#x57FA;&#x7C7B;&#x7684;&#x6307;&#x9488;&#x6216;&#x5F15;&#x7528;&#xFF0C;&#x53CD;&#x4E4B;&#x4E0D;&#x53EF;</li>
<li>&#x666E;&#x901A;&#x51FD;&#x6570;&#xFF08;&#x975E;&#x7C7B;&#x6210;&#x5458;&#x51FD;&#x6570;&#xFF09;&#x4E0D;&#x80FD;&#x662F;&#x865A;&#x51FD;&#x6570;</li>
<li>&#x9759;&#x6001;&#x51FD;&#x6570;&#xFF08;static&#xFF09;&#x4E0D;&#x80FD;&#x662F;&#x865A;&#x51FD;&#x6570;</li>
<li>&#x6784;&#x9020;&#x51FD;&#x6570;&#x4E0D;&#x80FD;&#x662F;&#x865A;&#x51FD;&#x6570;&#xFF08;&#x56E0;&#x4E3A;&#x5728;&#x8C03;&#x7528;&#x6784;&#x9020;&#x51FD;&#x6570;&#x65F6;&#xFF0C;&#x865A;&#x8868;&#x6307;&#x9488;&#x5E76;&#x6CA1;&#x6709;&#x5728;&#x5BF9;&#x8C61;&#x7684;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#x4E2D;&#xFF0C;&#x5FC5;&#x987B;&#x8981;&#x6784;&#x9020;&#x51FD;&#x6570;&#x8C03;&#x7528;&#x5B8C;&#x6210;&#x540E;&#x624D;&#x4F1A;&#x5F62;&#x6210;&#x865A;&#x8868;&#x6307;&#x9488;&#xFF09;</li>
<li>&#x5185;&#x8054;&#x51FD;&#x6570;&#x4E0D;&#x80FD;&#x662F;&#x8868;&#x73B0;&#x591A;&#x6001;&#x6027;&#x65F6;&#x7684;&#x865A;&#x51FD;&#x6570;&#xFF0C;&#x89E3;&#x91CA;&#x89C1;&#xFF1A;<a href="https://github.com/huihut/interview#%E8%99%9A%E5%87%BD%E6%95%B0virtual%E5%8F%AF%E4%BB%A5%E6%98%AF%E5%86%85%E8%81%94%E5%87%BD%E6%95%B0inline%E5%90%97">&#x865A;&#x51FD;&#x6570;&#xFF08;virtual&#xFF09;&#x53EF;&#x4EE5;&#x662F;&#x5185;&#x8054;&#x51FD;&#x6570;&#xFF08;inline&#xFF09;&#x5417;&#xFF1F;</a></li>
</ul>
<p>&#x52A8;&#x6001;&#x591A;&#x6001;&#x4F7F;&#x7528;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Shape</span>                     <span class="token comment">// &#x5F62;&#x72B6;&#x7C7B;</span>
<span class="token punctuation">{</span>
<span class="token keyword">public</span><span class="token operator">:</span>
    <span class="token keyword">virtual</span> <span class="token keyword">double</span> <span class="token function">calcArea</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">virtual</span> <span class="token operator">~</span><span class="token function">Shape</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token keyword">class</span> <span class="token class-name">Circle</span> <span class="token operator">:</span> <span class="token base-clause"><span class="token keyword">public</span> <span class="token class-name">Shape</span>     <span class="token comment">// &#x5706;&#x5F62;&#x7C7B;</span></span>
<span class="token punctuation">{</span>
<span class="token keyword">public</span><span class="token operator">:</span>
    <span class="token keyword">virtual</span> <span class="token keyword">double</span> <span class="token function">calcArea</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token keyword">class</span> <span class="token class-name">Rect</span> <span class="token operator">:</span> <span class="token base-clause"><span class="token keyword">public</span> <span class="token class-name">Shape</span>       <span class="token comment">// &#x77E9;&#x5F62;&#x7C7B;</span></span>
<span class="token punctuation">{</span>
<span class="token keyword">public</span><span class="token operator">:</span>
    <span class="token keyword">virtual</span> <span class="token keyword">double</span> <span class="token function">calcArea</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    Shape <span class="token operator">*</span> shape1 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">Circle</span><span class="token punctuation">(</span><span class="token number">4.0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    Shape <span class="token operator">*</span> shape2 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">Rect</span><span class="token punctuation">(</span><span class="token number">5.0</span><span class="token punctuation">,</span> <span class="token number">6.0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    shape1<span class="token operator">-&gt;</span><span class="token function">calcArea</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>         <span class="token comment">// &#x8C03;&#x7528;&#x5706;&#x5F62;&#x7C7B;&#x91CC;&#x9762;&#x7684;&#x65B9;&#x6CD5;</span>
    shape2<span class="token operator">-&gt;</span><span class="token function">calcArea</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>         <span class="token comment">// &#x8C03;&#x7528;&#x77E9;&#x5F62;&#x7C7B;&#x91CC;&#x9762;&#x7684;&#x65B9;&#x6CD5;</span>
    <span class="token keyword">delete</span> shape1<span class="token punctuation">;</span>
    shape1 <span class="token operator">=</span> <span class="token keyword">nullptr</span><span class="token punctuation">;</span>
    <span class="token keyword">delete</span> shape2<span class="token punctuation">;</span>
    shape2 <span class="token operator">=</span> <span class="token keyword">nullptr</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</pre><h3 class="mume-header" id="%E8%99%9A%E6%9E%90%E6%9E%84%E5%87%BD%E6%95%B0">&#x865A;&#x6790;&#x6784;&#x51FD;&#x6570;</h3>

<p>&#x865A;&#x6790;&#x6784;&#x51FD;&#x6570;&#x662F;&#x4E3A;&#x4E86;&#x89E3;&#x51B3;&#x57FA;&#x7C7B;&#x7684;&#x6307;&#x9488;&#x6307;&#x5411;&#x6D3E;&#x751F;&#x7C7B;&#x5BF9;&#x8C61;&#xFF0C;&#x5E76;&#x7528;&#x57FA;&#x7C7B;&#x7684;&#x6307;&#x9488;&#x5220;&#x9664;&#x6D3E;&#x751F;&#x7C7B;&#x5BF9;&#x8C61;&#x3002;</p>
<p>&#x865A;&#x6790;&#x6784;&#x51FD;&#x6570;&#x4F7F;&#x7528;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Shape</span>
<span class="token punctuation">{</span>
<span class="token keyword">public</span><span class="token operator">:</span>
    <span class="token function">Shape</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>                    <span class="token comment">// &#x6784;&#x9020;&#x51FD;&#x6570;&#x4E0D;&#x80FD;&#x662F;&#x865A;&#x51FD;&#x6570;</span>
    <span class="token keyword">virtual</span> <span class="token keyword">double</span> <span class="token function">calcArea</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">virtual</span> <span class="token operator">~</span><span class="token function">Shape</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>           <span class="token comment">// &#x865A;&#x6790;&#x6784;&#x51FD;&#x6570;</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token keyword">class</span> <span class="token class-name">Circle</span> <span class="token operator">:</span> <span class="token base-clause"><span class="token keyword">public</span> <span class="token class-name">Shape</span>     <span class="token comment">// &#x5706;&#x5F62;&#x7C7B;</span></span>
<span class="token punctuation">{</span>
<span class="token keyword">public</span><span class="token operator">:</span>
    <span class="token keyword">virtual</span> <span class="token keyword">double</span> <span class="token function">calcArea</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    Shape <span class="token operator">*</span> shape1 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">Circle</span><span class="token punctuation">(</span><span class="token number">4.0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    shape1<span class="token operator">-&gt;</span><span class="token function">calcArea</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    
    <span class="token keyword">delete</span> shape1<span class="token punctuation">;</span>  <span class="token comment">// &#x56E0;&#x4E3A;Shape&#x6709;&#x865A;&#x6790;&#x6784;&#x51FD;&#x6570;&#xFF0C;&#x6240;&#x4EE5;delete&#x91CA;&#x653E;&#x5185;&#x5B58;&#x65F6;&#xFF0C;&#x5148;&#x8C03;&#x7528;&#x5B50;&#x7C7B;&#x6790;&#x6784;&#x51FD;&#x6570;&#xFF0C;&#x518D;&#x8C03;&#x7528;&#x57FA;&#x7C7B;&#x6790;&#x6784;&#x51FD;&#x6570;&#xFF0C;&#x9632;&#x6B62;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#x3002;</span>
    shape1 <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> <span class="token number">0</span>&#xFF1B;
<span class="token punctuation">}</span>
</pre><h3 class="mume-header" id="%E7%BA%AF%E8%99%9A%E5%87%BD%E6%95%B0">&#x7EAF;&#x865A;&#x51FD;&#x6570;</h3>

<p>&#x7EAF;&#x865A;&#x51FD;&#x6570;&#x662F;&#x4E00;&#x79CD;&#x7279;&#x6B8A;&#x7684;&#x865A;&#x51FD;&#x6570;&#xFF0C;&#x5728;&#x57FA;&#x7C7B;&#x4E2D;&#x4E0D;&#x80FD;&#x5BF9;&#x865A;&#x51FD;&#x6570;&#x7ED9;&#x51FA;&#x6709;&#x610F;&#x4E49;&#x7684;&#x5B9E;&#x73B0;&#xFF0C;&#x800C;&#x628A;&#x5B83;&#x58F0;&#x660E;&#x4E3A;&#x7EAF;&#x865A;&#x51FD;&#x6570;&#xFF0C;&#x5B83;&#x7684;&#x5B9E;&#x73B0;&#x7559;&#x7ED9;&#x8BE5;&#x57FA;&#x7C7B;&#x7684;&#x6D3E;&#x751F;&#x7C7B;&#x53BB;&#x505A;&#x3002;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">virtual</span> <span class="token keyword">int</span> <span class="token function">A</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
</pre><h3 class="mume-header" id="%E8%99%9A%E5%87%BD%E6%95%B0-%E7%BA%AF%E8%99%9A%E5%87%BD%E6%95%B0">&#x865A;&#x51FD;&#x6570;&#x3001;&#x7EAF;&#x865A;&#x51FD;&#x6570;</h3>

<ul>
<li>&#x7C7B;&#x91CC;&#x5982;&#x679C;&#x58F0;&#x660E;&#x4E86;&#x865A;&#x51FD;&#x6570;&#xFF0C;&#x8FD9;&#x4E2A;&#x51FD;&#x6570;&#x662F;&#x5B9E;&#x73B0;&#x7684;&#xFF0C;&#x54EA;&#x6015;&#x662F;&#x7A7A;&#x5B9E;&#x73B0;&#xFF0C;&#x5B83;&#x7684;&#x4F5C;&#x7528;&#x5C31;&#x662F;&#x4E3A;&#x4E86;&#x80FD;&#x8BA9;&#x8FD9;&#x4E2A;&#x51FD;&#x6570;&#x5728;&#x5B83;&#x7684;&#x5B50;&#x7C7B;&#x91CC;&#x9762;&#x53EF;&#x4EE5;&#x88AB;&#x8986;&#x76D6;&#xFF08;override&#xFF09;&#xFF0C;&#x8FD9;&#x6837;&#x7684;&#x8BDD;&#xFF0C;&#x7F16;&#x8BD1;&#x5668;&#x5C31;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x540E;&#x671F;&#x7ED1;&#x5B9A;&#x6765;&#x8FBE;&#x5230;&#x591A;&#x6001;&#x4E86;&#x3002;&#x7EAF;&#x865A;&#x51FD;&#x6570;&#x53EA;&#x662F;&#x4E00;&#x4E2A;&#x63A5;&#x53E3;&#xFF0C;&#x662F;&#x4E2A;&#x51FD;&#x6570;&#x7684;&#x58F0;&#x660E;&#x800C;&#x5DF2;&#xFF0C;&#x5B83;&#x8981;&#x7559;&#x5230;&#x5B50;&#x7C7B;&#x91CC;&#x53BB;&#x5B9E;&#x73B0;&#x3002;</li>
<li>&#x865A;&#x51FD;&#x6570;&#x5728;&#x5B50;&#x7C7B;&#x91CC;&#x9762;&#x53EF;&#x4EE5;&#x4E0D;&#x91CD;&#x5199;&#xFF1B;&#x4F46;&#x7EAF;&#x865A;&#x51FD;&#x6570;&#x5FC5;&#x987B;&#x5728;&#x5B50;&#x7C7B;&#x5B9E;&#x73B0;&#x624D;&#x53EF;&#x4EE5;&#x5B9E;&#x4F8B;&#x5316;&#x5B50;&#x7C7B;&#x3002;</li>
<li>&#x865A;&#x51FD;&#x6570;&#x7684;&#x7C7B;&#x7528;&#x4E8E; &#x201C;&#x5B9E;&#x4F5C;&#x7EE7;&#x627F;&#x201D;&#xFF0C;&#x7EE7;&#x627F;&#x63A5;&#x53E3;&#x7684;&#x540C;&#x65F6;&#x4E5F;&#x7EE7;&#x627F;&#x4E86;&#x7236;&#x7C7B;&#x7684;&#x5B9E;&#x73B0;&#x3002;&#x7EAF;&#x865A;&#x51FD;&#x6570;&#x5173;&#x6CE8;&#x7684;&#x662F;&#x63A5;&#x53E3;&#x7684;&#x7EDF;&#x4E00;&#x6027;&#xFF0C;&#x5B9E;&#x73B0;&#x7531;&#x5B50;&#x7C7B;&#x5B8C;&#x6210;&#x3002;</li>
<li>&#x5E26;&#x7EAF;&#x865A;&#x51FD;&#x6570;&#x7684;&#x7C7B;&#x53EB;&#x62BD;&#x8C61;&#x7C7B;&#xFF0C;&#x8FD9;&#x79CD;&#x7C7B;&#x4E0D;&#x80FD;&#x76F4;&#x63A5;&#x751F;&#x6210;&#x5BF9;&#x8C61;&#xFF0C;&#x800C;&#x53EA;&#x6709;&#x88AB;&#x7EE7;&#x627F;&#xFF0C;&#x5E76;&#x91CD;&#x5199;&#x5176;&#x865A;&#x51FD;&#x6570;&#x540E;&#xFF0C;&#x624D;&#x80FD;&#x4F7F;&#x7528;&#x3002;&#x62BD;&#x8C61;&#x7C7B;&#x88AB;&#x7EE7;&#x627F;&#x540E;&#xFF0C;&#x5B50;&#x7C7B;&#x53EF;&#x4EE5;&#x7EE7;&#x7EED;&#x662F;&#x62BD;&#x8C61;&#x7C7B;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x662F;&#x666E;&#x901A;&#x7C7B;&#x3002;</li>
<li>&#x865A;&#x57FA;&#x7C7B;&#x662F;&#x865A;&#x7EE7;&#x627F;&#x4E2D;&#x7684;&#x57FA;&#x7C7B;&#xFF0C;&#x5177;&#x4F53;&#x89C1;&#x4E0B;&#x6587;&#x865A;&#x7EE7;&#x627F;&#x3002;</li>
</ul>
<blockquote>
<p><a href="https://blog.csdn.net/u012260238/article/details/53610462">CSDN . C++ &#x4E2D;&#x7684;&#x865A;&#x51FD;&#x6570;&#x3001;&#x7EAF;&#x865A;&#x51FD;&#x6570;&#x533A;&#x522B;&#x548C;&#x8054;&#x7CFB;</a></p>
</blockquote>
<h3 class="mume-header" id="%E8%99%9A%E5%87%BD%E6%95%B0%E6%8C%87%E9%92%88-%E8%99%9A%E5%87%BD%E6%95%B0%E8%A1%A8">&#x865A;&#x51FD;&#x6570;&#x6307;&#x9488;&#x3001;&#x865A;&#x51FD;&#x6570;&#x8868;</h3>

<ul>
<li>&#x865A;&#x51FD;&#x6570;&#x6307;&#x9488;&#xFF1A;&#x5728;&#x542B;&#x6709;&#x865A;&#x51FD;&#x6570;&#x7C7B;&#x7684;&#x5BF9;&#x8C61;&#x4E2D;&#xFF0C;&#x6307;&#x5411;&#x865A;&#x51FD;&#x6570;&#x8868;&#xFF0C;&#x5728;&#x8FD0;&#x884C;&#x65F6;&#x786E;&#x5B9A;&#x3002;</li>
<li>&#x865A;&#x51FD;&#x6570;&#x8868;&#xFF1A;&#x5728;&#x7A0B;&#x5E8F;&#x53EA;&#x8BFB;&#x6570;&#x636E;&#x6BB5;&#xFF08;<code>.rodata section</code>&#xFF0C;&#x89C1;&#xFF1A;<a href="#%E7%9B%AE%E6%A0%87%E6%96%87%E4%BB%B6%E5%AD%98%E5%82%A8%E7%BB%93%E6%9E%84">&#x76EE;&#x6807;&#x6587;&#x4EF6;&#x5B58;&#x50A8;&#x7ED3;&#x6784;</a>&#xFF09;&#xFF0C;&#x5B58;&#x653E;&#x865A;&#x51FD;&#x6570;&#x6307;&#x9488;&#xFF0C;&#x5982;&#x679C;&#x6D3E;&#x751F;&#x7C7B;&#x5B9E;&#x73B0;&#x4E86;&#x57FA;&#x7C7B;&#x7684;&#x67D0;&#x4E2A;&#x865A;&#x51FD;&#x6570;&#xFF0C;&#x5219;&#x5728;&#x865A;&#x8868;&#x4E2D;&#x8986;&#x76D6;&#x539F;&#x672C;&#x57FA;&#x7C7B;&#x7684;&#x90A3;&#x4E2A;&#x865A;&#x51FD;&#x6570;&#x6307;&#x9488;&#xFF0C;&#x5728;&#x7F16;&#x8BD1;&#x65F6;&#x6839;&#x636E;&#x7C7B;&#x7684;&#x58F0;&#x660E;&#x521B;&#x5EFA;&#x3002;</li>
</ul>
<blockquote>
<p><a href="https://blog.twofei.com/496/">C++&#x4E2D;&#x7684;&#x865A;&#x51FD;&#x6570;(&#x8868;)&#x5B9E;&#x73B0;&#x673A;&#x5236;&#x4EE5;&#x53CA;&#x7528;C&#x8BED;&#x8A00;&#x5BF9;&#x5176;&#x8FDB;&#x884C;&#x7684;&#x6A21;&#x62DF;&#x5B9E;&#x73B0;</a></p>
</blockquote>
<h3 class="mume-header" id="%E8%99%9A%E7%BB%A7%E6%89%BF">&#x865A;&#x7EE7;&#x627F;</h3>

<p>&#x865A;&#x7EE7;&#x627F;&#x7528;&#x4E8E;&#x89E3;&#x51B3;&#x591A;&#x7EE7;&#x627F;&#x6761;&#x4EF6;&#x4E0B;&#x7684;&#x83F1;&#x5F62;&#x7EE7;&#x627F;&#x95EE;&#x9898;&#xFF08;&#x6D6A;&#x8D39;&#x5B58;&#x50A8;&#x7A7A;&#x95F4;&#x3001;&#x5B58;&#x5728;&#x4E8C;&#x4E49;&#x6027;&#xFF09;&#x3002;</p>
<p>&#x5E95;&#x5C42;&#x5B9E;&#x73B0;&#x539F;&#x7406;&#x4E0E;&#x7F16;&#x8BD1;&#x5668;&#x76F8;&#x5173;&#xFF0C;&#x4E00;&#x822C;&#x901A;&#x8FC7;<strong>&#x865A;&#x57FA;&#x7C7B;&#x6307;&#x9488;</strong>&#x548C;<strong>&#x865A;&#x57FA;&#x7C7B;&#x8868;</strong>&#x5B9E;&#x73B0;&#xFF0C;&#x6BCF;&#x4E2A;&#x865A;&#x7EE7;&#x627F;&#x7684;&#x5B50;&#x7C7B;&#x90FD;&#x6709;&#x4E00;&#x4E2A;&#x865A;&#x57FA;&#x7C7B;&#x6307;&#x9488;&#xFF08;&#x5360;&#x7528;&#x4E00;&#x4E2A;&#x6307;&#x9488;&#x7684;&#x5B58;&#x50A8;&#x7A7A;&#x95F4;&#xFF0C;4&#x5B57;&#x8282;&#xFF09;&#x548C;&#x865A;&#x57FA;&#x7C7B;&#x8868;&#xFF08;&#x4E0D;&#x5360;&#x7528;&#x7C7B;&#x5BF9;&#x8C61;&#x7684;&#x5B58;&#x50A8;&#x7A7A;&#x95F4;&#xFF09;&#xFF08;&#x9700;&#x8981;&#x5F3A;&#x8C03;&#x7684;&#x662F;&#xFF0C;&#x865A;&#x57FA;&#x7C7B;&#x4F9D;&#x65E7;&#x4F1A;&#x5728;&#x5B50;&#x7C7B;&#x91CC;&#x9762;&#x5B58;&#x5728;&#x62F7;&#x8D1D;&#xFF0C;&#x53EA;&#x662F;&#x4EC5;&#x4EC5;&#x6700;&#x591A;&#x5B58;&#x5728;&#x4E00;&#x4EFD;&#x800C;&#x5DF2;&#xFF0C;&#x5E76;&#x4E0D;&#x662F;&#x4E0D;&#x5728;&#x5B50;&#x7C7B;&#x91CC;&#x9762;&#x4E86;&#xFF09;&#xFF1B;&#x5F53;&#x865A;&#x7EE7;&#x627F;&#x7684;&#x5B50;&#x7C7B;&#x88AB;&#x5F53;&#x505A;&#x7236;&#x7C7B;&#x7EE7;&#x627F;&#x65F6;&#xFF0C;&#x865A;&#x57FA;&#x7C7B;&#x6307;&#x9488;&#x4E5F;&#x4F1A;&#x88AB;&#x7EE7;&#x627F;&#x3002;</p>
<p>&#x5B9E;&#x9645;&#x4E0A;&#xFF0C;vbptr &#x6307;&#x7684;&#x662F;&#x865A;&#x57FA;&#x7C7B;&#x8868;&#x6307;&#x9488;&#xFF08;virtual base table pointer&#xFF09;&#xFF0C;&#x8BE5;&#x6307;&#x9488;&#x6307;&#x5411;&#x4E86;&#x4E00;&#x4E2A;&#x865A;&#x57FA;&#x7C7B;&#x8868;&#xFF08;virtual table&#xFF09;&#xFF0C;&#x865A;&#x8868;&#x4E2D;&#x8BB0;&#x5F55;&#x4E86;&#x865A;&#x57FA;&#x7C7B;&#x4E0E;&#x672C;&#x7C7B;&#x7684;&#x504F;&#x79FB;&#x5730;&#x5740;&#xFF1B;&#x901A;&#x8FC7;&#x504F;&#x79FB;&#x5730;&#x5740;&#xFF0C;&#x8FD9;&#x6837;&#x5C31;&#x627E;&#x5230;&#x4E86;&#x865A;&#x57FA;&#x7C7B;&#x6210;&#x5458;&#xFF0C;&#x800C;&#x865A;&#x7EE7;&#x627F;&#x4E5F;&#x4E0D;&#x7528;&#x50CF;&#x666E;&#x901A;&#x591A;&#x7EE7;&#x627F;&#x90A3;&#x6837;&#x7EF4;&#x6301;&#x7740;&#x516C;&#x5171;&#x57FA;&#x7C7B;&#xFF08;&#x865A;&#x57FA;&#x7C7B;&#xFF09;&#x7684;&#x4E24;&#x4EFD;&#x540C;&#x6837;&#x7684;&#x62F7;&#x8D1D;&#xFF0C;&#x8282;&#x7701;&#x4E86;&#x5B58;&#x50A8;&#x7A7A;&#x95F4;&#x3002;</p>
<h3 class="mume-header" id="%E8%99%9A%E7%BB%A7%E6%89%BF-%E8%99%9A%E5%87%BD%E6%95%B0">&#x865A;&#x7EE7;&#x627F;&#x3001;&#x865A;&#x51FD;&#x6570;</h3>

<ul>
<li>&#x76F8;&#x540C;&#x4E4B;&#x5904;&#xFF1A;&#x90FD;&#x5229;&#x7528;&#x4E86;&#x865A;&#x6307;&#x9488;&#xFF08;&#x5747;&#x5360;&#x7528;&#x7C7B;&#x7684;&#x5B58;&#x50A8;&#x7A7A;&#x95F4;&#xFF09;&#x548C;&#x865A;&#x8868;&#xFF08;&#x5747;&#x4E0D;&#x5360;&#x7528;&#x7C7B;&#x7684;&#x5B58;&#x50A8;&#x7A7A;&#x95F4;&#xFF09;</li>
<li>&#x4E0D;&#x540C;&#x4E4B;&#x5904;&#xFF1A;
<ul>
<li>&#x865A;&#x7EE7;&#x627F;
<ul>
<li>&#x865A;&#x57FA;&#x7C7B;&#x4F9D;&#x65E7;&#x5B58;&#x5728;&#x7EE7;&#x627F;&#x7C7B;&#x4E2D;&#xFF0C;&#x53EA;&#x5360;&#x7528;&#x5B58;&#x50A8;&#x7A7A;&#x95F4;</li>
<li>&#x865A;&#x57FA;&#x7C7B;&#x8868;&#x5B58;&#x50A8;&#x7684;&#x662F;&#x865A;&#x57FA;&#x7C7B;&#x76F8;&#x5BF9;&#x76F4;&#x63A5;&#x7EE7;&#x627F;&#x7C7B;&#x7684;&#x504F;&#x79FB;</li>
</ul>
</li>
<li>&#x865A;&#x51FD;&#x6570;
<ul>
<li>&#x865A;&#x51FD;&#x6570;&#x4E0D;&#x5360;&#x7528;&#x5B58;&#x50A8;&#x7A7A;&#x95F4;</li>
<li>&#x865A;&#x51FD;&#x6570;&#x8868;&#x5B58;&#x50A8;&#x7684;&#x662F;&#x865A;&#x51FD;&#x6570;&#x5730;&#x5740;</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 class="mume-header" id="%E6%A8%A1%E6%9D%BF%E7%B1%BB-%E6%88%90%E5%91%98%E6%A8%A1%E6%9D%BF-%E8%99%9A%E5%87%BD%E6%95%B0">&#x6A21;&#x677F;&#x7C7B;&#x3001;&#x6210;&#x5458;&#x6A21;&#x677F;&#x3001;&#x865A;&#x51FD;&#x6570;</h3>

<ul>
<li>&#x6A21;&#x677F;&#x7C7B;&#x4E2D;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x865A;&#x51FD;&#x6570;</li>
<li>&#x4E00;&#x4E2A;&#x7C7B;&#xFF08;&#x65E0;&#x8BBA;&#x662F;&#x666E;&#x901A;&#x7C7B;&#x8FD8;&#x662F;&#x7C7B;&#x6A21;&#x677F;&#xFF09;&#x7684;&#x6210;&#x5458;&#x6A21;&#x677F;&#xFF08;&#x672C;&#x8EAB;&#x662F;&#x6A21;&#x677F;&#x7684;&#x6210;&#x5458;&#x51FD;&#x6570;&#xFF09;&#x4E0D;&#x80FD;&#x662F;&#x865A;&#x51FD;&#x6570;</li>
</ul>
<h3 class="mume-header" id="%E6%8A%BD%E8%B1%A1%E7%B1%BB-%E6%8E%A5%E5%8F%A3%E7%B1%BB-%E8%81%9A%E5%90%88%E7%B1%BB">&#x62BD;&#x8C61;&#x7C7B;&#x3001;&#x63A5;&#x53E3;&#x7C7B;&#x3001;&#x805A;&#x5408;&#x7C7B;</h3>

<ul>
<li>&#x62BD;&#x8C61;&#x7C7B;&#xFF1A;&#x542B;&#x6709;&#x7EAF;&#x865A;&#x51FD;&#x6570;&#x7684;&#x7C7B;</li>
<li>&#x63A5;&#x53E3;&#x7C7B;&#xFF1A;&#x4EC5;&#x542B;&#x6709;&#x7EAF;&#x865A;&#x51FD;&#x6570;&#x7684;&#x62BD;&#x8C61;&#x7C7B;</li>
<li>&#x805A;&#x5408;&#x7C7B;&#xFF1A;&#x7528;&#x6237;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x8BBF;&#x95EE;&#x5176;&#x6210;&#x5458;&#xFF0C;&#x5E76;&#x4E14;&#x5177;&#x6709;&#x7279;&#x6B8A;&#x7684;&#x521D;&#x59CB;&#x5316;&#x8BED;&#x6CD5;&#x5F62;&#x5F0F;&#x3002;&#x6EE1;&#x8DB3;&#x5982;&#x4E0B;&#x7279;&#x70B9;&#xFF1A;
<ul>
<li>&#x6240;&#x6709;&#x6210;&#x5458;&#x90FD;&#x662F; public</li>
<li>&#x6CA1;&#x6709;&#x5B9A;&#x4E49;&#x4EFB;&#x4F55;&#x6784;&#x9020;&#x51FD;&#x6570;</li>
<li>&#x6CA1;&#x6709;&#x7C7B;&#x5185;&#x521D;&#x59CB;&#x5316;</li>
<li>&#x6CA1;&#x6709;&#x57FA;&#x7C7B;&#xFF0C;&#x4E5F;&#x6CA1;&#x6709; virtual &#x51FD;&#x6570;</li>
</ul>
</li>
</ul>
<h3 class="mume-header" id="%E5%86%85%E5%AD%98%E5%88%86%E9%85%8D%E5%92%8C%E7%AE%A1%E7%90%86">&#x5185;&#x5B58;&#x5206;&#x914D;&#x548C;&#x7BA1;&#x7406;</h3>

<h4 class="mume-header" id="malloc-calloc-realloc-alloca">malloc&#x3001;calloc&#x3001;realloc&#x3001;alloca</h4>

<ol>
<li>malloc&#xFF1A;&#x7533;&#x8BF7;&#x6307;&#x5B9A;&#x5B57;&#x8282;&#x6570;&#x7684;&#x5185;&#x5B58;&#x3002;&#x7533;&#x8BF7;&#x5230;&#x7684;&#x5185;&#x5B58;&#x4E2D;&#x7684;&#x521D;&#x59CB;&#x503C;&#x4E0D;&#x786E;&#x5B9A;&#x3002;</li>
<li>calloc&#xFF1A;&#x4E3A;&#x6307;&#x5B9A;&#x957F;&#x5EA6;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x5206;&#x914D;&#x80FD;&#x5BB9;&#x7EB3;&#x5176;&#x6307;&#x5B9A;&#x4E2A;&#x6570;&#x7684;&#x5185;&#x5B58;&#x3002;&#x7533;&#x8BF7;&#x5230;&#x7684;&#x5185;&#x5B58;&#x7684;&#x6BCF;&#x4E00;&#x4F4D;&#xFF08;bit&#xFF09;&#x90FD;&#x521D;&#x59CB;&#x5316;&#x4E3A; 0&#x3002;</li>
<li>realloc&#xFF1A;&#x66F4;&#x6539;&#x4EE5;&#x524D;&#x5206;&#x914D;&#x7684;&#x5185;&#x5B58;&#x957F;&#x5EA6;&#xFF08;&#x589E;&#x52A0;&#x6216;&#x51CF;&#x5C11;&#xFF09;&#x3002;&#x5F53;&#x589E;&#x52A0;&#x957F;&#x5EA6;&#x65F6;&#xFF0C;&#x53EF;&#x80FD;&#x9700;&#x5C06;&#x4EE5;&#x524D;&#x5206;&#x914D;&#x533A;&#x7684;&#x5185;&#x5BB9;&#x79FB;&#x5230;&#x53E6;&#x4E00;&#x4E2A;&#x8DB3;&#x591F;&#x5927;&#x7684;&#x533A;&#x57DF;&#xFF0C;&#x800C;&#x65B0;&#x589E;&#x533A;&#x57DF;&#x5185;&#x7684;&#x521D;&#x59CB;&#x503C;&#x5219;&#x4E0D;&#x786E;&#x5B9A;&#x3002;</li>
<li>alloca&#xFF1A;&#x5728;&#x6808;&#x4E0A;&#x7533;&#x8BF7;&#x5185;&#x5B58;&#x3002;&#x7A0B;&#x5E8F;&#x5728;&#x51FA;&#x6808;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4F1A;&#x81EA;&#x52A8;&#x91CA;&#x653E;&#x5185;&#x5B58;&#x3002;&#x4F46;&#x662F;&#x9700;&#x8981;&#x6CE8;&#x610F;&#x7684;&#x662F;&#xFF0C;alloca &#x4E0D;&#x5177;&#x53EF;&#x79FB;&#x690D;&#x6027;, &#x800C;&#x4E14;&#x5728;&#x6CA1;&#x6709;&#x4F20;&#x7EDF;&#x5806;&#x6808;&#x7684;&#x673A;&#x5668;&#x4E0A;&#x5F88;&#x96BE;&#x5B9E;&#x73B0;&#x3002;alloca &#x4E0D;&#x5B9C;&#x4F7F;&#x7528;&#x5728;&#x5FC5;&#x987B;&#x5E7F;&#x6CDB;&#x79FB;&#x690D;&#x7684;&#x7A0B;&#x5E8F;&#x4E2D;&#x3002;C99 &#x4E2D;&#x652F;&#x6301;&#x53D8;&#x957F;&#x6570;&#x7EC4; (VLA)&#xFF0C;&#x53EF;&#x4EE5;&#x7528;&#x6765;&#x66FF;&#x4EE3; alloca&#x3002;</li>
</ol>
<h4 class="mume-header" id="malloc-free">malloc&#x3001;free</h4>

<p>&#x7528;&#x4E8E;&#x5206;&#x914D;&#x3001;&#x91CA;&#x653E;&#x5185;&#x5B58;</p>
<p>malloc&#x3001;free &#x4F7F;&#x7528;</p>
<p>&#x7533;&#x8BF7;&#x5185;&#x5B58;&#xFF0C;&#x786E;&#x8BA4;&#x662F;&#x5426;&#x7533;&#x8BF7;&#x6210;&#x529F;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">char</span> <span class="token operator">*</span>str <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">char</span><span class="token operator">*</span><span class="token punctuation">)</span> <span class="token function">malloc</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">assert</span><span class="token punctuation">(</span>str <span class="token operator">!=</span> <span class="token keyword">nullptr</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</pre><p>&#x91CA;&#x653E;&#x5185;&#x5B58;&#x540E;&#x6307;&#x9488;&#x7F6E;&#x7A7A;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token function">free</span><span class="token punctuation">(</span>p<span class="token punctuation">)</span><span class="token punctuation">;</span> 
p <span class="token operator">=</span> <span class="token keyword">nullptr</span><span class="token punctuation">;</span>
</pre><h4 class="mume-header" id="new-delete">new&#x3001;delete</h4>

<ol>
<li>new / new[]&#xFF1A;&#x5B8C;&#x6210;&#x4E24;&#x4EF6;&#x4E8B;&#xFF0C;&#x5148;&#x5E95;&#x5C42;&#x8C03;&#x7528; malloc &#x5206;&#x914D;&#x4E86;&#x5185;&#x5B58;&#xFF0C;&#x7136;&#x540E;&#x8C03;&#x7528;&#x6784;&#x9020;&#x51FD;&#x6570;&#xFF08;&#x521B;&#x5EFA;&#x5BF9;&#x8C61;&#xFF09;&#x3002;</li>
<li>delete/delete[]&#xFF1A;&#x4E5F;&#x5B8C;&#x6210;&#x4E24;&#x4EF6;&#x4E8B;&#xFF0C;&#x5148;&#x8C03;&#x7528;&#x6790;&#x6784;&#x51FD;&#x6570;&#xFF08;&#x6E05;&#x7406;&#x8D44;&#x6E90;&#xFF09;&#xFF0C;&#x7136;&#x540E;&#x5E95;&#x5C42;&#x8C03;&#x7528; free &#x91CA;&#x653E;&#x7A7A;&#x95F4;&#x3002;</li>
<li>new &#x5728;&#x7533;&#x8BF7;&#x5185;&#x5B58;&#x65F6;&#x4F1A;&#x81EA;&#x52A8;&#x8BA1;&#x7B97;&#x6240;&#x9700;&#x5B57;&#x8282;&#x6570;&#xFF0C;&#x800C; malloc &#x5219;&#x9700;&#x6211;&#x4EEC;&#x81EA;&#x5DF1;&#x8F93;&#x5165;&#x7533;&#x8BF7;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#x7684;&#x5B57;&#x8282;&#x6570;&#x3002;</li>
</ol>
<p>new&#x3001;delete &#x4F7F;&#x7528;</p>
<p>&#x7533;&#x8BF7;&#x5185;&#x5B58;&#xFF0C;&#x786E;&#x8BA4;&#x662F;&#x5426;&#x7533;&#x8BF7;&#x6210;&#x529F;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    T<span class="token operator">*</span> t <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">T</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>     <span class="token comment">// &#x5148;&#x5185;&#x5B58;&#x5206;&#x914D; &#xFF0C;&#x518D;&#x6784;&#x9020;&#x51FD;&#x6570;</span>
    <span class="token keyword">delete</span> t<span class="token punctuation">;</span>           <span class="token comment">// &#x5148;&#x6790;&#x6784;&#x51FD;&#x6570;&#xFF0C;&#x518D;&#x5185;&#x5B58;&#x91CA;&#x653E;</span>
    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</pre><h4 class="mume-header" id="%E5%AE%9A%E4%BD%8D-new">&#x5B9A;&#x4F4D; new</h4>

<p>&#x5B9A;&#x4F4D; new&#xFF08;placement new&#xFF09;&#x5141;&#x8BB8;&#x6211;&#x4EEC;&#x5411; new &#x4F20;&#x9012;&#x989D;&#x5916;&#x7684;&#x5730;&#x5740;&#x53C2;&#x6570;&#xFF0C;&#x4ECE;&#x800C;&#x5728;&#x9884;&#x5148;&#x6307;&#x5B9A;&#x7684;&#x5185;&#x5B58;&#x533A;&#x57DF;&#x521B;&#x5EFA;&#x5BF9;&#x8C61;&#x3002;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">new</span> <span class="token punctuation">(</span>place_address<span class="token punctuation">)</span> type
<span class="token keyword">new</span> <span class="token punctuation">(</span>place_address<span class="token punctuation">)</span> <span class="token function">type</span> <span class="token punctuation">(</span>initializers<span class="token punctuation">)</span>
<span class="token keyword">new</span> <span class="token punctuation">(</span>place_address<span class="token punctuation">)</span> type <span class="token punctuation">[</span>size<span class="token punctuation">]</span>
<span class="token keyword">new</span> <span class="token punctuation">(</span>place_address<span class="token punctuation">)</span> type <span class="token punctuation">[</span>size<span class="token punctuation">]</span> <span class="token punctuation">{</span> braced initializer list <span class="token punctuation">}</span>
</pre><ul>
<li><code>place_address</code> &#x662F;&#x4E2A;&#x6307;&#x9488;</li>
<li><code>initializers</code> &#x63D0;&#x4F9B;&#x4E00;&#x4E2A;&#xFF08;&#x53EF;&#x80FD;&#x4E3A;&#x7A7A;&#x7684;&#xFF09;&#x4EE5;&#x9017;&#x53F7;&#x5206;&#x9694;&#x7684;&#x521D;&#x59CB;&#x503C;&#x5217;&#x8868;</li>
</ul>
<h3 class="mume-header" id="delete-this-%E5%90%88%E6%B3%95%E5%90%97">delete this &#x5408;&#x6CD5;&#x5417;&#xFF1F;</h3>

<blockquote>
<p><a href="https://isocpp.org/wiki/faq/freestore-mgmt#delete-this">Is it legal (and moral) for a member function to say delete this?</a></p>
</blockquote>
<p>&#x5408;&#x6CD5;&#xFF0C;&#x4F46;&#xFF1A;</p>
<ol>
<li>&#x5FC5;&#x987B;&#x4FDD;&#x8BC1; this &#x5BF9;&#x8C61;&#x662F;&#x901A;&#x8FC7; <code>new</code>&#xFF08;&#x4E0D;&#x662F; <code>new[]</code>&#x3001;&#x4E0D;&#x662F; placement new&#x3001;&#x4E0D;&#x662F;&#x6808;&#x4E0A;&#x3001;&#x4E0D;&#x662F;&#x5168;&#x5C40;&#x3001;&#x4E0D;&#x662F;&#x5176;&#x4ED6;&#x5BF9;&#x8C61;&#x6210;&#x5458;&#xFF09;&#x5206;&#x914D;&#x7684;</li>
<li>&#x5FC5;&#x987B;&#x4FDD;&#x8BC1;&#x8C03;&#x7528; <code>delete this</code> &#x7684;&#x6210;&#x5458;&#x51FD;&#x6570;&#x662F;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x8C03;&#x7528; this &#x7684;&#x6210;&#x5458;&#x51FD;&#x6570;</li>
<li>&#x5FC5;&#x987B;&#x4FDD;&#x8BC1;&#x6210;&#x5458;&#x51FD;&#x6570;&#x7684; <code>delete this</code> &#x540E;&#x9762;&#x6CA1;&#x6709;&#x8C03;&#x7528; this &#x4E86;</li>
<li>&#x5FC5;&#x987B;&#x4FDD;&#x8BC1; <code>delete this</code> &#x540E;&#x6CA1;&#x6709;&#x4EBA;&#x4F7F;&#x7528;&#x4E86;</li>
</ol>
<h3 class="mume-header" id="%E5%A6%82%E4%BD%95%E5%AE%9A%E4%B9%89%E4%B8%80%E4%B8%AA%E5%8F%AA%E8%83%BD%E5%9C%A8%E5%A0%86%E4%B8%8A%E6%A0%88%E4%B8%8A%E7%94%9F%E6%88%90%E5%AF%B9%E8%B1%A1%E7%9A%84%E7%B1%BB">&#x5982;&#x4F55;&#x5B9A;&#x4E49;&#x4E00;&#x4E2A;&#x53EA;&#x80FD;&#x5728;&#x5806;&#x4E0A;&#xFF08;&#x6808;&#x4E0A;&#xFF09;&#x751F;&#x6210;&#x5BF9;&#x8C61;&#x7684;&#x7C7B;&#xFF1F;</h3>

<blockquote>
<p><a href="https://www.nowcoder.com/questionTerminal/0a584aa13f804f3ea72b442a065a7618">&#x5982;&#x4F55;&#x5B9A;&#x4E49;&#x4E00;&#x4E2A;&#x53EA;&#x80FD;&#x5728;&#x5806;&#x4E0A;&#xFF08;&#x6808;&#x4E0A;&#xFF09;&#x751F;&#x6210;&#x5BF9;&#x8C61;&#x7684;&#x7C7B;?</a></p>
</blockquote>
<h4 class="mume-header" id="%E5%8F%AA%E8%83%BD%E5%9C%A8%E5%A0%86%E4%B8%8A">&#x53EA;&#x80FD;&#x5728;&#x5806;&#x4E0A;</h4>

<p>&#x65B9;&#x6CD5;&#xFF1A;&#x5C06;&#x6790;&#x6784;&#x51FD;&#x6570;&#x8BBE;&#x7F6E;&#x4E3A;&#x79C1;&#x6709;</p>
<p>&#x539F;&#x56E0;&#xFF1A;C++ &#x662F;&#x9759;&#x6001;&#x7ED1;&#x5B9A;&#x8BED;&#x8A00;&#xFF0C;&#x7F16;&#x8BD1;&#x5668;&#x7BA1;&#x7406;&#x6808;&#x4E0A;&#x5BF9;&#x8C61;&#x7684;&#x751F;&#x547D;&#x5468;&#x671F;&#xFF0C;&#x7F16;&#x8BD1;&#x5668;&#x5728;&#x4E3A;&#x7C7B;&#x5BF9;&#x8C61;&#x5206;&#x914D;&#x6808;&#x7A7A;&#x95F4;&#x65F6;&#xFF0C;&#x4F1A;&#x5148;&#x68C0;&#x67E5;&#x7C7B;&#x7684;&#x6790;&#x6784;&#x51FD;&#x6570;&#x7684;&#x8BBF;&#x95EE;&#x6027;&#x3002;&#x82E5;&#x6790;&#x6784;&#x51FD;&#x6570;&#x4E0D;&#x53EF;&#x8BBF;&#x95EE;&#xFF0C;&#x5219;&#x4E0D;&#x80FD;&#x5728;&#x6808;&#x4E0A;&#x521B;&#x5EFA;&#x5BF9;&#x8C61;&#x3002;</p>
<h4 class="mume-header" id="%E5%8F%AA%E8%83%BD%E5%9C%A8%E6%A0%88%E4%B8%8A">&#x53EA;&#x80FD;&#x5728;&#x6808;&#x4E0A;</h4>

<p>&#x65B9;&#x6CD5;&#xFF1A;&#x5C06; new &#x548C; delete &#x91CD;&#x8F7D;&#x4E3A;&#x79C1;&#x6709;</p>
<p>&#x539F;&#x56E0;&#xFF1A;&#x5728;&#x5806;&#x4E0A;&#x751F;&#x6210;&#x5BF9;&#x8C61;&#xFF0C;&#x4F7F;&#x7528; new &#x5173;&#x952E;&#x8BCD;&#x64CD;&#x4F5C;&#xFF0C;&#x5176;&#x8FC7;&#x7A0B;&#x5206;&#x4E3A;&#x4E24;&#x9636;&#x6BB5;&#xFF1A;&#x7B2C;&#x4E00;&#x9636;&#x6BB5;&#xFF0C;&#x4F7F;&#x7528; new &#x5728;&#x5806;&#x4E0A;&#x5BFB;&#x627E;&#x53EF;&#x7528;&#x5185;&#x5B58;&#xFF0C;&#x5206;&#x914D;&#x7ED9;&#x5BF9;&#x8C61;&#xFF1B;&#x7B2C;&#x4E8C;&#x9636;&#x6BB5;&#xFF0C;&#x8C03;&#x7528;&#x6784;&#x9020;&#x51FD;&#x6570;&#x751F;&#x6210;&#x5BF9;&#x8C61;&#x3002;&#x5C06; new &#x64CD;&#x4F5C;&#x8BBE;&#x7F6E;&#x4E3A;&#x79C1;&#x6709;&#xFF0C;&#x90A3;&#x4E48;&#x7B2C;&#x4E00;&#x9636;&#x6BB5;&#x5C31;&#x65E0;&#x6CD5;&#x5B8C;&#x6210;&#xFF0C;&#x5C31;&#x4E0D;&#x80FD;&#x591F;&#x5728;&#x5806;&#x4E0A;&#x751F;&#x6210;&#x5BF9;&#x8C61;&#x3002;</p>
<h3 class="mume-header" id="%E6%99%BA%E8%83%BD%E6%8C%87%E9%92%88">&#x667A;&#x80FD;&#x6307;&#x9488;</h3>

<h4 class="mume-header" id="c-%E6%A0%87%E5%87%86%E5%BA%93stl%E4%B8%AD">C++ &#x6807;&#x51C6;&#x5E93;&#xFF08;STL&#xFF09;&#x4E2D;</h4>

<p>&#x5934;&#x6587;&#x4EF6;&#xFF1A;<code>#include &lt;memory&gt;</code></p>
<h4 class="mume-header" id="c-98">C++ 98</h4>

<pre data-role="codeBlock" data-info="cpp" class="language-cpp">std<span class="token operator">::</span>auto_ptr<span class="token operator">&lt;</span>std<span class="token operator">::</span>string<span class="token operator">&gt;</span> <span class="token function">ps</span> <span class="token punctuation">(</span><span class="token keyword">new</span> std<span class="token operator">::</span><span class="token function">string</span><span class="token punctuation">(</span>str<span class="token punctuation">)</span><span class="token punctuation">)</span>&#xFF1B;
</pre><h4 class="mume-header" id="c-11">C++ 11</h4>

<ol>
<li>shared_ptr</li>
<li>unique_ptr</li>
<li>weak_ptr</li>
<li>auto_ptr&#xFF08;&#x88AB; C++11 &#x5F03;&#x7528;&#xFF09;</li>
</ol>
<ul>
<li>Class shared_ptr &#x5B9E;&#x73B0;&#x5171;&#x4EAB;&#x5F0F;&#x62E5;&#x6709;&#xFF08;shared ownership&#xFF09;&#x6982;&#x5FF5;&#x3002;&#x591A;&#x4E2A;&#x667A;&#x80FD;&#x6307;&#x9488;&#x6307;&#x5411;&#x76F8;&#x540C;&#x5BF9;&#x8C61;&#xFF0C;&#x8BE5;&#x5BF9;&#x8C61;&#x548C;&#x5176;&#x76F8;&#x5173;&#x8D44;&#x6E90;&#x4F1A;&#x5728; &#x201C;&#x6700;&#x540E;&#x4E00;&#x4E2A; reference &#x88AB;&#x9500;&#x6BC1;&#x201D; &#x65F6;&#x88AB;&#x91CA;&#x653E;&#x3002;&#x4E3A;&#x4E86;&#x5728;&#x7ED3;&#x6784;&#x8F83;&#x590D;&#x6742;&#x7684;&#x60C5;&#x666F;&#x4E2D;&#x6267;&#x884C;&#x4E0A;&#x8FF0;&#x5DE5;&#x4F5C;&#xFF0C;&#x6807;&#x51C6;&#x5E93;&#x63D0;&#x4F9B; weak_ptr&#x3001;bad_weak_ptr &#x548C; enable_shared_from_this &#x7B49;&#x8F85;&#x52A9;&#x7C7B;&#x3002;</li>
<li>Class unique_ptr &#x5B9E;&#x73B0;&#x72EC;&#x5360;&#x5F0F;&#x62E5;&#x6709;&#xFF08;exclusive ownership&#xFF09;&#x6216;&#x4E25;&#x683C;&#x62E5;&#x6709;&#xFF08;strict ownership&#xFF09;&#x6982;&#x5FF5;&#xFF0C;&#x4FDD;&#x8BC1;&#x540C;&#x4E00;&#x65F6;&#x95F4;&#x5185;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x667A;&#x80FD;&#x6307;&#x9488;&#x53EF;&#x4EE5;&#x6307;&#x5411;&#x8BE5;&#x5BF9;&#x8C61;&#x3002;&#x4F60;&#x53EF;&#x4EE5;&#x79FB;&#x4EA4;&#x62E5;&#x6709;&#x6743;&#x3002;&#x5B83;&#x5BF9;&#x4E8E;&#x907F;&#x514D;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#xFF08;resource leak&#xFF09;&#x2014;&#x2014;&#x5982; new &#x540E;&#x5FD8;&#x8BB0; delete &#x2014;&#x2014;&#x7279;&#x522B;&#x6709;&#x7528;&#x3002;</li>
</ul>
<h5 class="mume-header" id="shared_ptr">shared_ptr</h5>

<p>&#x591A;&#x4E2A;&#x667A;&#x80FD;&#x6307;&#x9488;&#x53EF;&#x4EE5;&#x5171;&#x4EAB;&#x540C;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#xFF0C;&#x5BF9;&#x8C61;&#x7684;&#x6700;&#x672B;&#x4E00;&#x4E2A;&#x62E5;&#x6709;&#x7740;&#x6709;&#x8D23;&#x4EFB;&#x9500;&#x6BC1;&#x5BF9;&#x8C61;&#xFF0C;&#x5E76;&#x6E05;&#x7406;&#x4E0E;&#x8BE5;&#x5BF9;&#x8C61;&#x76F8;&#x5173;&#x7684;&#x6240;&#x6709;&#x8D44;&#x6E90;&#x3002;</p>
<ul>
<li>&#x652F;&#x6301;&#x5B9A;&#x5236;&#x578B;&#x5220;&#x9664;&#x5668;&#xFF08;custom deleter&#xFF09;&#xFF0C;&#x53EF;&#x9632;&#x8303; Cross-DLL &#x95EE;&#x9898;&#xFF08;&#x5BF9;&#x8C61;&#x5728;&#x52A8;&#x6001;&#x94FE;&#x63A5;&#x5E93;&#xFF08;DLL&#xFF09;&#x4E2D;&#x88AB; new &#x521B;&#x5EFA;&#xFF0C;&#x5374;&#x5728;&#x53E6;&#x4E00;&#x4E2A; DLL &#x5185;&#x88AB; delete &#x9500;&#x6BC1;&#xFF09;&#x3001;&#x81EA;&#x52A8;&#x89E3;&#x9664;&#x4E92;&#x65A5;&#x9501;</li>
</ul>
<h5 class="mume-header" id="weak_ptr">weak_ptr</h5>

<p>weak_ptr &#x5141;&#x8BB8;&#x4F60;&#x5171;&#x4EAB;&#x4F46;&#x4E0D;&#x62E5;&#x6709;&#x67D0;&#x5BF9;&#x8C61;&#xFF0C;&#x4E00;&#x65E6;&#x6700;&#x672B;&#x4E00;&#x4E2A;&#x62E5;&#x6709;&#x8BE5;&#x5BF9;&#x8C61;&#x7684;&#x667A;&#x80FD;&#x6307;&#x9488;&#x5931;&#x53BB;&#x4E86;&#x6240;&#x6709;&#x6743;&#xFF0C;&#x4EFB;&#x4F55; weak_ptr &#x90FD;&#x4F1A;&#x81EA;&#x52A8;&#x6210;&#x7A7A;&#xFF08;empty&#xFF09;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x5728; default &#x548C; copy &#x6784;&#x9020;&#x51FD;&#x6570;&#x4E4B;&#x5916;&#xFF0C;weak_ptr &#x53EA;&#x63D0;&#x4F9B; &#x201C;&#x63A5;&#x53D7;&#x4E00;&#x4E2A; shared_ptr&#x201D; &#x7684;&#x6784;&#x9020;&#x51FD;&#x6570;&#x3002;</p>
<ul>
<li>&#x53EF;&#x6253;&#x7834;&#x73AF;&#x72B6;&#x5F15;&#x7528;&#xFF08;cycles of references&#xFF0C;&#x4E24;&#x4E2A;&#x5176;&#x5B9E;&#x5DF2;&#x7ECF;&#x6CA1;&#x6709;&#x88AB;&#x4F7F;&#x7528;&#x7684;&#x5BF9;&#x8C61;&#x5F7C;&#x6B64;&#x4E92;&#x6307;&#xFF0C;&#x4F7F;&#x4E4B;&#x770B;&#x4F3C;&#x8FD8;&#x5728; &#x201C;&#x88AB;&#x4F7F;&#x7528;&#x201D; &#x7684;&#x72B6;&#x6001;&#xFF09;&#x7684;&#x95EE;&#x9898;</li>
</ul>
<h5 class="mume-header" id="unique_ptr">unique_ptr</h5>

<p>unique_ptr &#x662F; C++11 &#x624D;&#x5F00;&#x59CB;&#x63D0;&#x4F9B;&#x7684;&#x7C7B;&#x578B;&#xFF0C;&#x662F;&#x4E00;&#x79CD;&#x5728;&#x5F02;&#x5E38;&#x65F6;&#x53EF;&#x4EE5;&#x5E2E;&#x52A9;&#x907F;&#x514D;&#x8D44;&#x6E90;&#x6CC4;&#x6F0F;&#x7684;&#x667A;&#x80FD;&#x6307;&#x9488;&#x3002;&#x91C7;&#x7528;&#x72EC;&#x5360;&#x5F0F;&#x62E5;&#x6709;&#xFF0C;&#x610F;&#x5473;&#x7740;&#x53EF;&#x4EE5;&#x786E;&#x4FDD;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x548C;&#x5176;&#x76F8;&#x5E94;&#x7684;&#x8D44;&#x6E90;&#x540C;&#x4E00;&#x65F6;&#x95F4;&#x53EA;&#x88AB;&#x4E00;&#x4E2A; pointer &#x62E5;&#x6709;&#x3002;&#x4E00;&#x65E6;&#x62E5;&#x6709;&#x7740;&#x88AB;&#x9500;&#x6BC1;&#x6216;&#x7F16;&#x7A0B; empty&#xFF0C;&#x6216;&#x5F00;&#x59CB;&#x62E5;&#x6709;&#x53E6;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#xFF0C;&#x5148;&#x524D;&#x62E5;&#x6709;&#x7684;&#x90A3;&#x4E2A;&#x5BF9;&#x8C61;&#x5C31;&#x4F1A;&#x88AB;&#x9500;&#x6BC1;&#xFF0C;&#x5176;&#x4EFB;&#x4F55;&#x76F8;&#x5E94;&#x8D44;&#x6E90;&#x4EA6;&#x4F1A;&#x88AB;&#x91CA;&#x653E;&#x3002;</p>
<ul>
<li>unique_ptr &#x7528;&#x4E8E;&#x53D6;&#x4EE3; auto_ptr</li>
</ul>
<h5 class="mume-header" id="auto_ptr">auto_ptr</h5>

<p>&#x88AB; c++11 &#x5F03;&#x7528;&#xFF0C;&#x539F;&#x56E0;&#x662F;&#x7F3A;&#x4E4F;&#x8BED;&#x8A00;&#x7279;&#x6027;&#x5982; &#x201C;&#x9488;&#x5BF9;&#x6784;&#x9020;&#x548C;&#x8D4B;&#x503C;&#x201D; &#x7684; <code>std::move</code> &#x8BED;&#x4E49;&#xFF0C;&#x4EE5;&#x53CA;&#x5176;&#x4ED6;&#x7455;&#x75B5;&#x3002;</p>
<h5 class="mume-header" id="auto_ptr-%E4%B8%8E-unique_ptr-%E6%AF%94%E8%BE%83">auto_ptr &#x4E0E; unique_ptr &#x6BD4;&#x8F83;</h5>

<ul>
<li>auto_ptr &#x53EF;&#x4EE5;&#x8D4B;&#x503C;&#x62F7;&#x8D1D;&#xFF0C;&#x590D;&#x5236;&#x62F7;&#x8D1D;&#x540E;&#x6240;&#x6709;&#x6743;&#x8F6C;&#x79FB;&#xFF1B;unqiue_ptr &#x65E0;&#x62F7;&#x8D1D;&#x8D4B;&#x503C;&#x8BED;&#x4E49;&#xFF0C;&#x4F46;&#x5B9E;&#x73B0;&#x4E86;<code>move</code> &#x8BED;&#x4E49;&#xFF1B;</li>
<li>auto_ptr &#x5BF9;&#x8C61;&#x4E0D;&#x80FD;&#x7BA1;&#x7406;&#x6570;&#x7EC4;&#xFF08;&#x6790;&#x6784;&#x8C03;&#x7528; <code>delete</code>&#xFF09;&#xFF0C;unique_ptr &#x53EF;&#x4EE5;&#x7BA1;&#x7406;&#x6570;&#x7EC4;&#xFF08;&#x6790;&#x6784;&#x8C03;&#x7528; <code>delete[]</code> &#xFF09;&#xFF1B;</li>
</ul>
<h3 class="mume-header" id="%E5%BC%BA%E5%88%B6%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2%E8%BF%90%E7%AE%97%E7%AC%A6">&#x5F3A;&#x5236;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x8FD0;&#x7B97;&#x7B26;</h3>

<blockquote>
<p><a href="https://msdn.microsoft.com/zh-CN/library/5f6c9f8h.aspx">MSDN . &#x5F3A;&#x5236;&#x8F6C;&#x6362;&#x8FD0;&#x7B97;&#x7B26;</a></p>
</blockquote>
<h4 class="mume-header" id="static_cast">static_cast</h4>

<ul>
<li>&#x7528;&#x4E8E;&#x975E;&#x591A;&#x6001;&#x7C7B;&#x578B;&#x7684;&#x8F6C;&#x6362;</li>
<li>&#x4E0D;&#x6267;&#x884C;&#x8FD0;&#x884C;&#x65F6;&#x7C7B;&#x578B;&#x68C0;&#x67E5;&#xFF08;&#x8F6C;&#x6362;&#x5B89;&#x5168;&#x6027;&#x4E0D;&#x5982; dynamic_cast&#xFF09;</li>
<li>&#x901A;&#x5E38;&#x7528;&#x4E8E;&#x8F6C;&#x6362;&#x6570;&#x503C;&#x6570;&#x636E;&#x7C7B;&#x578B;&#xFF08;&#x5982; float -&gt; int&#xFF09;</li>
<li>&#x53EF;&#x4EE5;&#x5728;&#x6574;&#x4E2A;&#x7C7B;&#x5C42;&#x6B21;&#x7ED3;&#x6784;&#x4E2D;&#x79FB;&#x52A8;&#x6307;&#x9488;&#xFF0C;&#x5B50;&#x7C7B;&#x8F6C;&#x5316;&#x4E3A;&#x7236;&#x7C7B;&#x5B89;&#x5168;&#xFF08;&#x5411;&#x4E0A;&#x8F6C;&#x6362;&#xFF09;&#xFF0C;&#x7236;&#x7C7B;&#x8F6C;&#x5316;&#x4E3A;&#x5B50;&#x7C7B;&#x4E0D;&#x5B89;&#x5168;&#xFF08;&#x56E0;&#x4E3A;&#x5B50;&#x7C7B;&#x53EF;&#x80FD;&#x6709;&#x4E0D;&#x5728;&#x7236;&#x7C7B;&#x7684;&#x5B57;&#x6BB5;&#x6216;&#x65B9;&#x6CD5;&#xFF09;</li>
</ul>
<blockquote>
<p>&#x5411;&#x4E0A;&#x8F6C;&#x6362;&#x662F;&#x4E00;&#x79CD;&#x9690;&#x5F0F;&#x8F6C;&#x6362;&#x3002;</p>
</blockquote>
<h4 class="mume-header" id="dynamic_cast">dynamic_cast</h4>

<ul>
<li>&#x7528;&#x4E8E;&#x591A;&#x6001;&#x7C7B;&#x578B;&#x7684;&#x8F6C;&#x6362;</li>
<li>&#x6267;&#x884C;&#x884C;&#x8FD0;&#x884C;&#x65F6;&#x7C7B;&#x578B;&#x68C0;&#x67E5;</li>
<li>&#x53EA;&#x9002;&#x7528;&#x4E8E;&#x6307;&#x9488;&#x6216;&#x5F15;&#x7528;</li>
<li>&#x5BF9;&#x4E0D;&#x660E;&#x786E;&#x7684;&#x6307;&#x9488;&#x7684;&#x8F6C;&#x6362;&#x5C06;&#x5931;&#x8D25;&#xFF08;&#x8FD4;&#x56DE; nullptr&#xFF09;&#xFF0C;&#x4F46;&#x4E0D;&#x5F15;&#x53D1;&#x5F02;&#x5E38;</li>
<li>&#x53EF;&#x4EE5;&#x5728;&#x6574;&#x4E2A;&#x7C7B;&#x5C42;&#x6B21;&#x7ED3;&#x6784;&#x4E2D;&#x79FB;&#x52A8;&#x6307;&#x9488;&#xFF0C;&#x5305;&#x62EC;&#x5411;&#x4E0A;&#x8F6C;&#x6362;&#x3001;&#x5411;&#x4E0B;&#x8F6C;&#x6362;</li>
</ul>
<h4 class="mume-header" id="const_cast">const_cast</h4>

<ul>
<li>&#x7528;&#x4E8E;&#x5220;&#x9664; const&#x3001;volatile &#x548C; __unaligned &#x7279;&#x6027;&#xFF08;&#x5982;&#x5C06; const int &#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x4E3A; int &#x7C7B;&#x578B; &#xFF09;</li>
</ul>
<h4 class="mume-header" id="reinterpret_cast">reinterpret_cast</h4>

<ul>
<li>&#x7528;&#x4E8E;&#x4F4D;&#x7684;&#x7B80;&#x5355;&#x91CD;&#x65B0;&#x89E3;&#x91CA;</li>
<li>&#x6EE5;&#x7528; reinterpret_cast &#x8FD0;&#x7B97;&#x7B26;&#x53EF;&#x80FD;&#x5F88;&#x5BB9;&#x6613;&#x5E26;&#x6765;&#x98CE;&#x9669;&#x3002; &#x9664;&#x975E;&#x6240;&#x9700;&#x8F6C;&#x6362;&#x672C;&#x8EAB;&#x662F;&#x4F4E;&#x7EA7;&#x522B;&#x7684;&#xFF0C;&#x5426;&#x5219;&#x5E94;&#x4F7F;&#x7528;&#x5176;&#x4ED6;&#x5F3A;&#x5236;&#x8F6C;&#x6362;&#x8FD0;&#x7B97;&#x7B26;&#x4E4B;&#x4E00;&#x3002;</li>
<li>&#x5141;&#x8BB8;&#x5C06;&#x4EFB;&#x4F55;&#x6307;&#x9488;&#x8F6C;&#x6362;&#x4E3A;&#x4EFB;&#x4F55;&#x5176;&#x4ED6;&#x6307;&#x9488;&#x7C7B;&#x578B;&#xFF08;&#x5982; <code>char*</code> &#x5230; <code>int*</code> &#x6216; <code>One_class*</code> &#x5230; <code>Unrelated_class*</code> &#x4E4B;&#x7C7B;&#x7684;&#x8F6C;&#x6362;&#xFF0C;&#x4F46;&#x5176;&#x672C;&#x8EAB;&#x5E76;&#x4E0D;&#x5B89;&#x5168;&#xFF09;</li>
<li>&#x4E5F;&#x5141;&#x8BB8;&#x5C06;&#x4EFB;&#x4F55;&#x6574;&#x6570;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x4E3A;&#x4EFB;&#x4F55;&#x6307;&#x9488;&#x7C7B;&#x578B;&#x4EE5;&#x53CA;&#x53CD;&#x5411;&#x8F6C;&#x6362;&#x3002;</li>
<li>reinterpret_cast &#x8FD0;&#x7B97;&#x7B26;&#x4E0D;&#x80FD;&#x4E22;&#x6389; const&#x3001;volatile &#x6216; __unaligned &#x7279;&#x6027;&#x3002;</li>
<li>reinterpret_cast &#x7684;&#x4E00;&#x4E2A;&#x5B9E;&#x9645;&#x7528;&#x9014;&#x662F;&#x5728;&#x54C8;&#x5E0C;&#x51FD;&#x6570;&#x4E2D;&#xFF0C;&#x5373;&#xFF0C;&#x901A;&#x8FC7;&#x8BA9;&#x4E24;&#x4E2A;&#x4E0D;&#x540C;&#x7684;&#x503C;&#x51E0;&#x4E4E;&#x4E0D;&#x4EE5;&#x76F8;&#x540C;&#x7684;&#x7D22;&#x5F15;&#x7ED3;&#x5C3E;&#x7684;&#x65B9;&#x5F0F;&#x5C06;&#x503C;&#x6620;&#x5C04;&#x5230;&#x7D22;&#x5F15;&#x3002;</li>
</ul>
<h4 class="mume-header" id="bad_cast">bad_cast</h4>

<ul>
<li>&#x7531;&#x4E8E;&#x5F3A;&#x5236;&#x8F6C;&#x6362;&#x4E3A;&#x5F15;&#x7528;&#x7C7B;&#x578B;&#x5931;&#x8D25;&#xFF0C;dynamic_cast &#x8FD0;&#x7B97;&#x7B26;&#x5F15;&#x53D1; bad_cast &#x5F02;&#x5E38;&#x3002;</li>
</ul>
<p>bad_cast &#x4F7F;&#x7528;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">try</span> <span class="token punctuation">{</span>  
    Circle<span class="token operator">&amp;</span> ref_circle <span class="token operator">=</span> <span class="token keyword">dynamic_cast</span><span class="token operator">&lt;</span>Circle<span class="token operator">&amp;</span><span class="token operator">&gt;</span><span class="token punctuation">(</span>ref_shape<span class="token punctuation">)</span><span class="token punctuation">;</span>   
<span class="token punctuation">}</span>  
<span class="token keyword">catch</span> <span class="token punctuation">(</span>bad_cast b<span class="token punctuation">)</span> <span class="token punctuation">{</span>  
    cout <span class="token operator">&lt;&lt;</span> <span class="token string">&quot;Caught: &quot;</span> <span class="token operator">&lt;&lt;</span> b<span class="token punctuation">.</span><span class="token function">what</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  
<span class="token punctuation">}</span> 
</pre><h3 class="mume-header" id="%E8%BF%90%E8%A1%8C%E6%97%B6%E7%B1%BB%E5%9E%8B%E4%BF%A1%E6%81%AF-rtti">&#x8FD0;&#x884C;&#x65F6;&#x7C7B;&#x578B;&#x4FE1;&#x606F; (RTTI)</h3>

<h4 class="mume-header" id="dynamic_cast-1">dynamic_cast</h4>

<ul>
<li>&#x7528;&#x4E8E;&#x591A;&#x6001;&#x7C7B;&#x578B;&#x7684;&#x8F6C;&#x6362;</li>
</ul>
<h4 class="mume-header" id="typeid">typeid</h4>

<ul>
<li>typeid &#x8FD0;&#x7B97;&#x7B26;&#x5141;&#x8BB8;&#x5728;&#x8FD0;&#x884C;&#x65F6;&#x786E;&#x5B9A;&#x5BF9;&#x8C61;&#x7684;&#x7C7B;&#x578B;</li>
<li>type_id &#x8FD4;&#x56DE;&#x4E00;&#x4E2A; type_info &#x5BF9;&#x8C61;&#x7684;&#x5F15;&#x7528;</li>
<li>&#x5982;&#x679C;&#x60F3;&#x901A;&#x8FC7;&#x57FA;&#x7C7B;&#x7684;&#x6307;&#x9488;&#x83B7;&#x5F97;&#x6D3E;&#x751F;&#x7C7B;&#x7684;&#x6570;&#x636E;&#x7C7B;&#x578B;&#xFF0C;&#x57FA;&#x7C7B;&#x5FC5;&#x987B;&#x5E26;&#x6709;&#x865A;&#x51FD;&#x6570;</li>
<li>&#x53EA;&#x80FD;&#x83B7;&#x53D6;&#x5BF9;&#x8C61;&#x7684;&#x5B9E;&#x9645;&#x7C7B;&#x578B;</li>
</ul>
<h4 class="mume-header" id="type_info">type_info</h4>

<ul>
<li>type_info &#x7C7B;&#x63CF;&#x8FF0;&#x7F16;&#x8BD1;&#x5668;&#x5728;&#x7A0B;&#x5E8F;&#x4E2D;&#x751F;&#x6210;&#x7684;&#x7C7B;&#x578B;&#x4FE1;&#x606F;&#x3002; &#x6B64;&#x7C7B;&#x7684;&#x5BF9;&#x8C61;&#x53EF;&#x4EE5;&#x6709;&#x6548;&#x5B58;&#x50A8;&#x6307;&#x5411;&#x7C7B;&#x578B;&#x7684;&#x540D;&#x79F0;&#x7684;&#x6307;&#x9488;&#x3002; type_info &#x7C7B;&#x8FD8;&#x53EF;&#x5B58;&#x50A8;&#x9002;&#x5408;&#x6BD4;&#x8F83;&#x4E24;&#x4E2A;&#x7C7B;&#x578B;&#x662F;&#x5426;&#x76F8;&#x7B49;&#x6216;&#x6BD4;&#x8F83;&#x5176;&#x6392;&#x5217;&#x987A;&#x5E8F;&#x7684;&#x7F16;&#x7801;&#x503C;&#x3002; &#x7C7B;&#x578B;&#x7684;&#x7F16;&#x7801;&#x89C4;&#x5219;&#x548C;&#x6392;&#x5217;&#x987A;&#x5E8F;&#x662F;&#x672A;&#x6307;&#x5B9A;&#x7684;&#xFF0C;&#x5E76;&#x4E14;&#x53EF;&#x80FD;&#x56E0;&#x7A0B;&#x5E8F;&#x800C;&#x5F02;&#x3002;</li>
<li>&#x5934;&#x6587;&#x4EF6;&#xFF1A;<code>typeinfo</code></li>
</ul>
<p>typeid&#x3001;type_info &#x4F7F;&#x7528;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;iostream&gt;</span></span>
<span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span>

<span class="token keyword">class</span> <span class="token class-name">Flyable</span>                       <span class="token comment">// &#x80FD;&#x98DE;&#x7684;</span>
<span class="token punctuation">{</span>
<span class="token keyword">public</span><span class="token operator">:</span>
    <span class="token keyword">virtual</span> <span class="token keyword">void</span> <span class="token function">takeoff</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>     <span class="token comment">// &#x8D77;&#x98DE;</span>
    <span class="token keyword">virtual</span> <span class="token keyword">void</span> <span class="token function">land</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>        <span class="token comment">// &#x964D;&#x843D;</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token keyword">class</span> <span class="token class-name">Bird</span> <span class="token operator">:</span> <span class="token base-clause"><span class="token keyword">public</span> <span class="token class-name">Flyable</span>         <span class="token comment">// &#x9E1F;</span></span>
<span class="token punctuation">{</span>
<span class="token keyword">public</span><span class="token operator">:</span>
    <span class="token keyword">void</span> <span class="token function">foraging</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">}</span>           <span class="token comment">// &#x89C5;&#x98DF;</span>
    <span class="token keyword">virtual</span> <span class="token keyword">void</span> <span class="token function">takeoff</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">}</span>
    <span class="token keyword">virtual</span> <span class="token keyword">void</span> <span class="token function">land</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">}</span>
    <span class="token keyword">virtual</span> <span class="token operator">~</span><span class="token function">Bird</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token keyword">class</span> <span class="token class-name">Plane</span> <span class="token operator">:</span> <span class="token base-clause"><span class="token keyword">public</span> <span class="token class-name">Flyable</span>        <span class="token comment">// &#x98DE;&#x673A;</span></span>
<span class="token punctuation">{</span>
<span class="token keyword">public</span><span class="token operator">:</span>
    <span class="token keyword">void</span> <span class="token function">carry</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">}</span>              <span class="token comment">// &#x8FD0;&#x8F93;</span>
    <span class="token keyword">virtual</span> <span class="token keyword">void</span> <span class="token function">takeoff</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">}</span>
    <span class="token keyword">virtual</span> <span class="token keyword">void</span> <span class="token function">land</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>

<span class="token keyword">class</span> <span class="token class-name">type_info</span>
<span class="token punctuation">{</span>
<span class="token keyword">public</span><span class="token operator">:</span>
    <span class="token keyword">const</span> <span class="token keyword">char</span><span class="token operator">*</span> <span class="token function">name</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">const</span><span class="token punctuation">;</span>
    <span class="token keyword">bool</span> <span class="token keyword">operator</span> <span class="token operator">==</span> <span class="token punctuation">(</span><span class="token keyword">const</span> type_info <span class="token operator">&amp;</span> rhs<span class="token punctuation">)</span> <span class="token keyword">const</span><span class="token punctuation">;</span>
    <span class="token keyword">bool</span> <span class="token keyword">operator</span> <span class="token operator">!=</span> <span class="token punctuation">(</span><span class="token keyword">const</span> type_info <span class="token operator">&amp;</span> rhs<span class="token punctuation">)</span> <span class="token keyword">const</span><span class="token punctuation">;</span>
    <span class="token keyword">int</span> <span class="token function">before</span><span class="token punctuation">(</span><span class="token keyword">const</span> type_info <span class="token operator">&amp;</span> rhs<span class="token punctuation">)</span> <span class="token keyword">const</span><span class="token punctuation">;</span>
    <span class="token keyword">virtual</span> <span class="token operator">~</span><span class="token function">type_info</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">private</span><span class="token operator">:</span>
    <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>

<span class="token keyword">void</span> <span class="token function">doSomething</span><span class="token punctuation">(</span>Flyable <span class="token operator">*</span>obj<span class="token punctuation">)</span>                 <span class="token comment">// &#x505A;&#x4E9B;&#x4E8B;&#x60C5;</span>
<span class="token punctuation">{</span>
    obj<span class="token operator">-&gt;</span><span class="token function">takeoff</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    cout <span class="token operator">&lt;&lt;</span> <span class="token keyword">typeid</span><span class="token punctuation">(</span><span class="token operator">*</span>obj<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">name</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">&lt;&lt;</span> endl<span class="token punctuation">;</span>        <span class="token comment">// &#x8F93;&#x51FA;&#x4F20;&#x5165;&#x5BF9;&#x8C61;&#x7C7B;&#x578B;&#xFF08;&quot;class Bird&quot; or &quot;class Plane&quot;&#xFF09;</span>

    <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token keyword">typeid</span><span class="token punctuation">(</span><span class="token operator">*</span>obj<span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token keyword">typeid</span><span class="token punctuation">(</span>Bird<span class="token punctuation">)</span><span class="token punctuation">)</span>            <span class="token comment">// &#x5224;&#x65AD;&#x5BF9;&#x8C61;&#x7C7B;&#x578B;</span>
    <span class="token punctuation">{</span>
        Bird <span class="token operator">*</span>bird <span class="token operator">=</span> <span class="token keyword">dynamic_cast</span><span class="token operator">&lt;</span>Bird <span class="token operator">*</span><span class="token operator">&gt;</span><span class="token punctuation">(</span>obj<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// &#x5BF9;&#x8C61;&#x8F6C;&#x5316;</span>
        bird<span class="token operator">-&gt;</span><span class="token function">foraging</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    obj<span class="token operator">-&gt;</span><span class="token function">land</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
	Bird <span class="token operator">*</span>b <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">Bird</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token function">doSomething</span><span class="token punctuation">(</span>b<span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token keyword">delete</span> b<span class="token punctuation">;</span>
	b <span class="token operator">=</span> <span class="token keyword">nullptr</span><span class="token punctuation">;</span>
	<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</pre><p><a id="effective" href></a></p>
<h2 class="mume-header" id="%EF%B8%8F-effective">&#x2B50;&#xFE0F; Effective</h2>

<h3 class="mume-header" id="effective-c">Effective C++</h3>

<ol>
<li>&#x89C6; C++ &#x4E3A;&#x4E00;&#x4E2A;&#x8BED;&#x8A00;&#x8054;&#x90A6;&#xFF08;C&#x3001;Object-Oriented C++&#x3001;Template C++&#x3001;STL&#xFF09;</li>
<li>&#x5B81;&#x53EF;&#x4EE5;&#x7F16;&#x8BD1;&#x5668;&#x66FF;&#x6362;&#x9884;&#x5904;&#x7406;&#x5668;&#xFF08;&#x5C3D;&#x91CF;&#x4EE5; <code>const</code>&#x3001;<code>enum</code>&#x3001;<code>inline</code> &#x66FF;&#x6362; <code>#define</code>&#xFF09;</li>
<li>&#x5C3D;&#x53EF;&#x80FD;&#x4F7F;&#x7528; const</li>
<li>&#x786E;&#x5B9A;&#x5BF9;&#x8C61;&#x88AB;&#x4F7F;&#x7528;&#x524D;&#x5DF2;&#x5148;&#x88AB;&#x521D;&#x59CB;&#x5316;&#xFF08;&#x6784;&#x9020;&#x65F6;&#x8D4B;&#x503C;&#xFF08;copy &#x6784;&#x9020;&#x51FD;&#x6570;&#xFF09;&#x6BD4; default &#x6784;&#x9020;&#x540E;&#x8D4B;&#x503C;&#xFF08;copy assignment&#xFF09;&#x6548;&#x7387;&#x9AD8;&#xFF09;</li>
<li>&#x4E86;&#x89E3; C++ &#x9ED8;&#x9ED8;&#x7F16;&#x5199;&#x5E76;&#x8C03;&#x7528;&#x54EA;&#x4E9B;&#x51FD;&#x6570;&#xFF08;&#x7F16;&#x8BD1;&#x5668;&#x6697;&#x81EA;&#x4E3A; class &#x521B;&#x5EFA; default &#x6784;&#x9020;&#x51FD;&#x6570;&#x3001;copy &#x6784;&#x9020;&#x51FD;&#x6570;&#x3001;copy assignment &#x64CD;&#x4F5C;&#x7B26;&#x3001;&#x6790;&#x6784;&#x51FD;&#x6570;&#xFF09;</li>
<li>&#x82E5;&#x4E0D;&#x60F3;&#x4F7F;&#x7528;&#x7F16;&#x8BD1;&#x5668;&#x81EA;&#x52A8;&#x751F;&#x6210;&#x7684;&#x51FD;&#x6570;&#xFF0C;&#x5C31;&#x5E94;&#x8BE5;&#x660E;&#x786E;&#x62D2;&#x7EDD;&#xFF08;&#x5C06;&#x4E0D;&#x60F3;&#x4F7F;&#x7528;&#x7684;&#x6210;&#x5458;&#x51FD;&#x6570;&#x58F0;&#x660E;&#x4E3A; private&#xFF0C;&#x5E76;&#x4E14;&#x4E0D;&#x4E88;&#x5B9E;&#x73B0;&#xFF09;</li>
<li>&#x4E3A;&#x591A;&#x6001;&#x57FA;&#x7C7B;&#x58F0;&#x660E; virtual &#x6790;&#x6784;&#x51FD;&#x6570;&#xFF08;&#x5982;&#x679C; class &#x5E26;&#x6709;&#x4EFB;&#x4F55; virtual &#x51FD;&#x6570;&#xFF0C;&#x5B83;&#x5C31;&#x5E94;&#x8BE5;&#x62E5;&#x6709;&#x4E00;&#x4E2A; virtual &#x6790;&#x6784;&#x51FD;&#x6570;&#xFF09;</li>
<li>&#x522B;&#x8BA9;&#x5F02;&#x5E38;&#x9003;&#x79BB;&#x6790;&#x6784;&#x51FD;&#x6570;&#xFF08;&#x6790;&#x6784;&#x51FD;&#x6570;&#x5E94;&#x8BE5;&#x541E;&#x4E0B;&#x4E0D;&#x4F20;&#x64AD;&#x5F02;&#x5E38;&#xFF0C;&#x6216;&#x8005;&#x7ED3;&#x675F;&#x7A0B;&#x5E8F;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x5410;&#x51FA;&#x5F02;&#x5E38;&#xFF1B;&#x5982;&#x679C;&#x8981;&#x5904;&#x7406;&#x5F02;&#x5E38;&#x5E94;&#x8BE5;&#x5728;&#x975E;&#x6790;&#x6784;&#x7684;&#x666E;&#x901A;&#x51FD;&#x6570;&#x5904;&#x7406;&#xFF09;</li>
<li>&#x7EDD;&#x4E0D;&#x5728;&#x6784;&#x9020;&#x548C;&#x6790;&#x6784;&#x8FC7;&#x7A0B;&#x4E2D;&#x8C03;&#x7528; virtual &#x51FD;&#x6570;&#xFF08;&#x56E0;&#x4E3A;&#x8FD9;&#x7C7B;&#x8C03;&#x7528;&#x4ECE;&#x4E0D;&#x4E0B;&#x964D;&#x81F3; derived class&#xFF09;</li>
<li>&#x4EE4; <code>operator=</code> &#x8FD4;&#x56DE;&#x4E00;&#x4E2A; <code>reference to *this</code> &#xFF08;&#x7528;&#x4E8E;&#x8FDE;&#x9501;&#x8D4B;&#x503C;&#xFF09;</li>
<li>&#x5728; <code>operator=</code> &#x4E2D;&#x5904;&#x7406; &#x201C;&#x81EA;&#x6211;&#x8D4B;&#x503C;&#x201D;</li>
<li>&#x8D4B;&#x503C;&#x5BF9;&#x8C61;&#x65F6;&#x5E94;&#x786E;&#x4FDD;&#x590D;&#x5236; &#x201C;&#x5BF9;&#x8C61;&#x5185;&#x7684;&#x6240;&#x6709;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x201D; &#x53CA; &#x201C;&#x6240;&#x6709; base class &#x6210;&#x5206;&#x201D;&#xFF08;&#x8C03;&#x7528;&#x57FA;&#x7C7B;&#x590D;&#x5236;&#x6784;&#x9020;&#x51FD;&#x6570;&#xFF09;</li>
<li>&#x4EE5;&#x5BF9;&#x8C61;&#x7BA1;&#x7406;&#x8D44;&#x6E90;&#xFF08;&#x8D44;&#x6E90;&#x5728;&#x6784;&#x9020;&#x51FD;&#x6570;&#x83B7;&#x5F97;&#xFF0C;&#x5728;&#x6790;&#x6784;&#x51FD;&#x6570;&#x91CA;&#x653E;&#xFF0C;&#x5EFA;&#x8BAE;&#x4F7F;&#x7528;&#x667A;&#x80FD;&#x6307;&#x9488;&#xFF0C;&#x8D44;&#x6E90;&#x53D6;&#x5F97;&#x65F6;&#x673A;&#x4FBF;&#x662F;&#x521D;&#x59CB;&#x5316;&#x65F6;&#x673A;&#xFF08;Resource Acquisition Is Initialization&#xFF0C;RAII&#xFF09;&#xFF09;</li>
<li>&#x5728;&#x8D44;&#x6E90;&#x7BA1;&#x7406;&#x7C7B;&#x4E2D;&#x5C0F;&#x5FC3; copying &#x884C;&#x4E3A;&#xFF08;&#x666E;&#x904D;&#x7684; RAII class copying &#x884C;&#x4E3A;&#x662F;&#xFF1A;&#x6291;&#x5236; copying&#x3001;&#x5F15;&#x7528;&#x8BA1;&#x6570;&#x3001;&#x6DF1;&#x5EA6;&#x62F7;&#x8D1D;&#x3001;&#x8F6C;&#x79FB;&#x5E95;&#x90E8;&#x8D44;&#x6E90;&#x62E5;&#x6709;&#x6743;&#xFF08;&#x7C7B;&#x4F3C; auto_ptr&#xFF09;&#xFF09;</li>
<li>&#x5728;&#x8D44;&#x6E90;&#x7BA1;&#x7406;&#x7C7B;&#x4E2D;&#x63D0;&#x4F9B;&#x5BF9;&#x539F;&#x59CB;&#x8D44;&#x6E90;&#xFF08;raw resources&#xFF09;&#x7684;&#x8BBF;&#x95EE;&#xFF08;&#x5BF9;&#x539F;&#x59CB;&#x8D44;&#x6E90;&#x7684;&#x8BBF;&#x95EE;&#x53EF;&#x80FD;&#x7ECF;&#x8FC7;&#x663E;&#x5F0F;&#x8F6C;&#x6362;&#x6216;&#x9690;&#x5F0F;&#x8F6C;&#x6362;&#xFF0C;&#x4E00;&#x822C;&#x800C;&#x8A00;&#x663E;&#x793A;&#x8F6C;&#x6362;&#x6BD4;&#x8F83;&#x5B89;&#x5168;&#xFF0C;&#x9690;&#x5F0F;&#x8F6C;&#x6362;&#x5BF9;&#x5BA2;&#x6237;&#x6BD4;&#x8F83;&#x65B9;&#x4FBF;&#xFF09;</li>
<li>&#x6210;&#x5BF9;&#x4F7F;&#x7528; new &#x548C; delete &#x65F6;&#x8981;&#x91C7;&#x53D6;&#x76F8;&#x540C;&#x5F62;&#x5F0F;&#xFF08;<code>new</code> &#x4E2D;&#x4F7F;&#x7528; <code>[]</code> &#x5219; <code>delete []</code>&#xFF0C;<code>new</code> &#x4E2D;&#x4E0D;&#x4F7F;&#x7528; <code>[]</code> &#x5219; <code>delete</code>&#xFF09;</li>
<li>&#x4EE5;&#x72EC;&#x7ACB;&#x8BED;&#x53E5;&#x5C06; newed &#x5BF9;&#x8C61;&#x5B58;&#x50A8;&#x4E8E;&#xFF08;&#x7F6E;&#x5165;&#xFF09;&#x667A;&#x80FD;&#x6307;&#x9488;&#xFF08;&#x5982;&#x679C;&#x4E0D;&#x8FD9;&#x6837;&#x505A;&#xFF0C;&#x53EF;&#x80FD;&#x4F1A;&#x56E0;&#x4E3A;&#x7F16;&#x8BD1;&#x5668;&#x4F18;&#x5316;&#xFF0C;&#x5BFC;&#x81F4;&#x96BE;&#x4EE5;&#x5BDF;&#x89C9;&#x7684;&#x8D44;&#x6E90;&#x6CC4;&#x6F0F;&#xFF09;</li>
<li>&#x8BA9;&#x63A5;&#x53E3;&#x5BB9;&#x6613;&#x88AB;&#x6B63;&#x786E;&#x4F7F;&#x7528;&#xFF0C;&#x4E0D;&#x6613;&#x88AB;&#x8BEF;&#x7528;&#xFF08;&#x4FC3;&#x8FDB;&#x6B63;&#x5E38;&#x4F7F;&#x7528;&#x7684;&#x529E;&#x6CD5;&#xFF1A;&#x63A5;&#x53E3;&#x7684;&#x4E00;&#x81F4;&#x6027;&#x3001;&#x5185;&#x7F6E;&#x7C7B;&#x578B;&#x7684;&#x884C;&#x4E3A;&#x517C;&#x5BB9;&#xFF1B;&#x963B;&#x6B62;&#x8BEF;&#x7528;&#x7684;&#x529E;&#x6CD5;&#xFF1A;&#x5EFA;&#x7ACB;&#x65B0;&#x7C7B;&#x578B;&#xFF0C;&#x9650;&#x5236;&#x7C7B;&#x578B;&#x4E0A;&#x7684;&#x64CD;&#x4F5C;&#xFF0C;&#x7EA6;&#x675F;&#x5BF9;&#x8C61;&#x503C;&#x3001;&#x6D88;&#x9664;&#x5BA2;&#x6237;&#x7684;&#x8D44;&#x6E90;&#x7BA1;&#x7406;&#x8D23;&#x4EFB;&#xFF09;</li>
<li>&#x8BBE;&#x8BA1; class &#x72B9;&#x5982;&#x8BBE;&#x8BA1; type&#xFF0C;&#x9700;&#x8981;&#x8003;&#x8651;&#x5BF9;&#x8C61;&#x521B;&#x5EFA;&#x3001;&#x9500;&#x6BC1;&#x3001;&#x521D;&#x59CB;&#x5316;&#x3001;&#x8D4B;&#x503C;&#x3001;&#x503C;&#x4F20;&#x9012;&#x3001;&#x5408;&#x6CD5;&#x503C;&#x3001;&#x7EE7;&#x627F;&#x5173;&#x7CFB;&#x3001;&#x8F6C;&#x6362;&#x3001;&#x4E00;&#x822C;&#x5316;&#x7B49;&#x7B49;&#x3002;</li>
<li>&#x5B81;&#x4EE5; pass-by-reference-to-const &#x66FF;&#x6362; pass-by-value &#xFF08;&#x524D;&#x8005;&#x901A;&#x5E38;&#x66F4;&#x9AD8;&#x6548;&#x3001;&#x907F;&#x514D;&#x5207;&#x5272;&#x95EE;&#x9898;&#xFF08;slicing problem&#xFF09;&#xFF0C;&#x4F46;&#x4E0D;&#x9002;&#x7528;&#x4E8E;&#x5185;&#x7F6E;&#x7C7B;&#x578B;&#x3001;STL&#x8FED;&#x4EE3;&#x5668;&#x3001;&#x51FD;&#x6570;&#x5BF9;&#x8C61;&#xFF09;</li>
<li>&#x5FC5;&#x987B;&#x8FD4;&#x56DE;&#x5BF9;&#x8C61;&#x65F6;&#xFF0C;&#x522B;&#x5984;&#x60F3;&#x8FD4;&#x56DE;&#x5176; reference&#xFF08;&#x7EDD;&#x4E0D;&#x8FD4;&#x56DE; pointer &#x6216; reference &#x6307;&#x5411;&#x4E00;&#x4E2A; local stack &#x5BF9;&#x8C61;&#xFF0C;&#x6216;&#x8FD4;&#x56DE; reference &#x6307;&#x5411;&#x4E00;&#x4E2A; heap-allocated &#x5BF9;&#x8C61;&#xFF0C;&#x6216;&#x8FD4;&#x56DE; pointer &#x6216; reference &#x6307;&#x5411;&#x4E00;&#x4E2A; local static &#x5BF9;&#x8C61;&#x800C;&#x6709;&#x53EF;&#x80FD;&#x540C;&#x65F6;&#x9700;&#x8981;&#x591A;&#x4E2A;&#x8FD9;&#x6837;&#x7684;&#x5BF9;&#x8C61;&#x3002;&#xFF09;</li>
<li>&#x5C06;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x58F0;&#x660E;&#x4E3A; private&#xFF08;&#x4E3A;&#x4E86;&#x5C01;&#x88C5;&#x3001;&#x4E00;&#x81F4;&#x6027;&#x3001;&#x5BF9;&#x5176;&#x8BFB;&#x5199;&#x7CBE;&#x786E;&#x63A7;&#x5236;&#x7B49;&#xFF09;</li>
<li>&#x5B81;&#x4EE5; non-member&#x3001;non-friend &#x66FF;&#x6362; member &#x51FD;&#x6570;&#xFF08;&#x53EF;&#x589E;&#x52A0;&#x5C01;&#x88C5;&#x6027;&#x3001;&#x5305;&#x88F9;&#x5F39;&#x6027;&#xFF08;packaging flexibility&#xFF09;&#x3001;&#x673A;&#x80FD;&#x6269;&#x5145;&#x6027;&#xFF09;</li>
<li>&#x82E5;&#x6240;&#x6709;&#x53C2;&#x6570;&#xFF08;&#x5305;&#x62EC;&#x88AB;this&#x6307;&#x9488;&#x6240;&#x6307;&#x7684;&#x90A3;&#x4E2A;&#x9690;&#x55BB;&#x53C2;&#x6570;&#xFF09;&#x7686;&#x987B;&#x8981;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#xFF0C;&#x8BF7;&#x4E3A;&#x6B64;&#x91C7;&#x7528; non-member &#x51FD;&#x6570;</li>
<li>&#x8003;&#x8651;&#x5199;&#x4E00;&#x4E2A;&#x4E0D;&#x629B;&#x5F02;&#x5E38;&#x7684; swap &#x51FD;&#x6570;</li>
<li>&#x5C3D;&#x53EF;&#x80FD;&#x5EF6;&#x540E;&#x53D8;&#x91CF;&#x5B9A;&#x4E49;&#x5F0F;&#x7684;&#x51FA;&#x73B0;&#x65F6;&#x95F4;&#xFF08;&#x53EF;&#x589E;&#x52A0;&#x7A0B;&#x5E8F;&#x6E05;&#x6670;&#x5EA6;&#x5E76;&#x6539;&#x5584;&#x7A0B;&#x5E8F;&#x6548;&#x7387;&#xFF09;</li>
<li>&#x5C3D;&#x91CF;&#x5C11;&#x505A;&#x8F6C;&#x578B;&#x52A8;&#x4F5C;&#xFF08;&#x65E7;&#x5F0F;&#xFF1A;<code>(T)expression</code>&#x3001;<code>T(expression)</code>&#xFF1B;&#x65B0;&#x5F0F;&#xFF1A;<code>const_cast&lt;T&gt;(expression)</code>&#x3001;<code>dynamic_cast&lt;T&gt;(expression)</code>&#x3001;<code>reinterpret_cast&lt;T&gt;(expression)</code>&#x3001;<code>static_cast&lt;T&gt;(expression)</code>&#x3001;&#xFF1B;&#x5C3D;&#x91CF;&#x907F;&#x514D;&#x8F6C;&#x578B;&#x3001;&#x6CE8;&#x91CD;&#x6548;&#x7387;&#x907F;&#x514D; dynamic_casts&#x3001;&#x5C3D;&#x91CF;&#x8BBE;&#x8BA1;&#x6210;&#x65E0;&#x9700;&#x8F6C;&#x578B;&#x3001;&#x53EF;&#x628A;&#x8F6C;&#x578B;&#x5C01;&#x88C5;&#x6210;&#x51FD;&#x6570;&#x3001;&#x5B81;&#x53EF;&#x7528;&#x65B0;&#x5F0F;&#x8F6C;&#x578B;&#xFF09;</li>
<li>&#x907F;&#x514D;&#x4F7F;&#x7528; handles&#xFF08;&#x5305;&#x62EC; &#x5F15;&#x7528;&#x3001;&#x6307;&#x9488;&#x3001;&#x8FED;&#x4EE3;&#x5668;&#xFF09;&#x6307;&#x5411;&#x5BF9;&#x8C61;&#x5185;&#x90E8;&#xFF08;&#x4EE5;&#x589E;&#x52A0;&#x5C01;&#x88C5;&#x6027;&#x3001;&#x4F7F; const &#x6210;&#x5458;&#x51FD;&#x6570;&#x7684;&#x884C;&#x4E3A;&#x66F4;&#x50CF; const&#x3001;&#x964D;&#x4F4E; &#x201C;&#x865A;&#x540A;&#x53F7;&#x7801;&#x724C;&#x201D;&#xFF08;dangling handles&#xFF0C;&#x5982;&#x60AC;&#x7A7A;&#x6307;&#x9488;&#x7B49;&#xFF09;&#x7684;&#x53EF;&#x80FD;&#x6027;&#xFF09;</li>
<li>&#x4E3A; &#x201C;&#x5F02;&#x5E38;&#x5B89;&#x5168;&#x201D; &#x800C;&#x52AA;&#x529B;&#x662F;&#x503C;&#x5F97;&#x7684;&#xFF08;&#x5F02;&#x5E38;&#x5B89;&#x5168;&#x51FD;&#x6570;&#xFF08;Exception-safe functions&#xFF09;&#x5373;&#x4F7F;&#x53D1;&#x751F;&#x5F02;&#x5E38;&#x4E5F;&#x4E0D;&#x4F1A;&#x6CC4;&#x9732;&#x8D44;&#x6E90;&#x6216;&#x5141;&#x8BB8;&#x4EFB;&#x4F55;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x8D25;&#x574F;&#xFF0C;&#x5206;&#x4E3A;&#x4E09;&#x79CD;&#x53EF;&#x80FD;&#x7684;&#x4FDD;&#x8BC1;&#xFF1A;&#x57FA;&#x672C;&#x578B;&#x3001;&#x5F3A;&#x5217;&#x578B;&#x3001;&#x4E0D;&#x629B;&#x5F02;&#x5E38;&#x578B;&#xFF09;</li>
<li>&#x900F;&#x5F7B;&#x4E86;&#x89E3; inlining &#x7684;&#x91CC;&#x91CC;&#x5916;&#x5916;&#xFF08;inlining &#x5728;&#x5927;&#x591A;&#x6570; C++ &#x7A0B;&#x5E8F;&#x4E2D;&#x662F;&#x7F16;&#x8BD1;&#x671F;&#x7684;&#x884C;&#x4E3A;&#xFF1B;inline &#x51FD;&#x6570;&#x662F;&#x5426;&#x771F;&#x6B63; inline&#xFF0C;&#x53D6;&#x51B3;&#x4E8E;&#x7F16;&#x8BD1;&#x5668;&#xFF1B;&#x5927;&#x90E8;&#x5206;&#x7F16;&#x8BD1;&#x5668;&#x62D2;&#x7EDD;&#x592A;&#x8FC7;&#x590D;&#x6742;&#xFF08;&#x5982;&#x5E26;&#x6709;&#x5FAA;&#x73AF;&#x6216;&#x9012;&#x5F52;&#xFF09;&#x7684;&#x51FD;&#x6570; inlining&#xFF0C;&#x800C;&#x6240;&#x6709;&#x5BF9; virtual &#x51FD;&#x6570;&#x7684;&#x8C03;&#x7528;&#xFF08;&#x9664;&#x975E;&#x662F;&#x6700;&#x5E73;&#x6DE1;&#x65E0;&#x5947;&#x7684;&#xFF09;&#x4E5F;&#x90FD;&#x4F1A;&#x4F7F; inlining &#x843D;&#x7A7A;&#xFF1B;inline &#x9020;&#x6210;&#x7684;&#x4EE3;&#x7801;&#x81A8;&#x80C0;&#x53EF;&#x80FD;&#x5E26;&#x6765;&#x6548;&#x7387;&#x635F;&#x5931;&#xFF1B;inline &#x51FD;&#x6570;&#x65E0;&#x6CD5;&#x968F;&#x7740;&#x7A0B;&#x5E8F;&#x5E93;&#x7684;&#x5347;&#x7EA7;&#x800C;&#x5347;&#x7EA7;&#xFF09;</li>
<li>&#x5C06;&#x6587;&#x4EF6;&#x95F4;&#x7684;&#x7F16;&#x8BD1;&#x4F9D;&#x5B58;&#x5173;&#x7CFB;&#x964D;&#x81F3;&#x6700;&#x4F4E;&#xFF08;&#x5982;&#x679C;&#x4F7F;&#x7528; object references &#x6216; object pointers &#x53EF;&#x4EE5;&#x5B8C;&#x6210;&#x4EFB;&#x52A1;&#xFF0C;&#x5C31;&#x4E0D;&#x8981;&#x4F7F;&#x7528; objects&#xFF1B;&#x5982;&#x679C;&#x80FD;&#x591F;&#xFF0C;&#x5C3D;&#x91CF;&#x4EE5; class &#x58F0;&#x660E;&#x5F0F;&#x66FF;&#x6362; class &#x5B9A;&#x4E49;&#x5F0F;&#xFF1B;&#x4E3A;&#x58F0;&#x660E;&#x5F0F;&#x548C;&#x5B9A;&#x4E49;&#x5F0F;&#x63D0;&#x4F9B;&#x4E0D;&#x540C;&#x7684;&#x5934;&#x6587;&#x4EF6;&#xFF09;</li>
<li>&#x786E;&#x5B9A;&#x4F60;&#x7684; public &#x7EE7;&#x627F;&#x5851;&#x6A21;&#x51FA; is-a&#xFF08;&#x662F;&#x4E00;&#x79CD;&#xFF09;&#x5173;&#x7CFB;&#xFF08;&#x9002;&#x7528;&#x4E8E; base classes &#x8EAB;&#x4E0A;&#x7684;&#x6BCF;&#x4E00;&#x4EF6;&#x4E8B;&#x60C5;&#x4E00;&#x5B9A;&#x9002;&#x7528;&#x4E8E; derived classes &#x8EAB;&#x4E0A;&#xFF0C;&#x56E0;&#x4E3A;&#x6BCF;&#x4E00;&#x4E2A; derived class &#x5BF9;&#x8C61;&#x4E5F;&#x90FD;&#x662F;&#x4E00;&#x4E2A; base class &#x5BF9;&#x8C61;&#xFF09;</li>
<li>&#x907F;&#x514D;&#x906E;&#x63A9;&#x7EE7;&#x627F;&#x800C;&#x6765;&#x7684;&#x540D;&#x5B57;&#xFF08;&#x53EF;&#x4F7F;&#x7528; using &#x58F0;&#x660E;&#x5F0F;&#x6216;&#x8F6C;&#x4EA4;&#x51FD;&#x6570;&#xFF08;forwarding functions&#xFF09;&#x6765;&#x8BA9;&#x88AB;&#x906E;&#x63A9;&#x7684;&#x540D;&#x5B57;&#x518D;&#x89C1;&#x5929;&#x65E5;&#xFF09;</li>
<li>&#x533A;&#x5206;&#x63A5;&#x53E3;&#x7EE7;&#x627F;&#x548C;&#x5B9E;&#x73B0;&#x7EE7;&#x627F;&#xFF08;&#x5728; public &#x7EE7;&#x627F;&#x4E4B;&#x4E0B;&#xFF0C;derived classes &#x603B;&#x662F;&#x7EE7;&#x627F; base class &#x7684;&#x63A5;&#x53E3;&#xFF1B;pure virtual &#x51FD;&#x6570;&#x53EA;&#x5177;&#x4F53;&#x6307;&#x5B9A;&#x63A5;&#x53E3;&#x7EE7;&#x627F;&#xFF1B;&#x975E;&#x7EAF; impure virtual &#x51FD;&#x6570;&#x5177;&#x4F53;&#x6307;&#x5B9A;&#x63A5;&#x53E3;&#x7EE7;&#x627F;&#x53CA;&#x7F3A;&#x7701;&#x5B9E;&#x73B0;&#x7EE7;&#x627F;&#xFF1B;non-virtual &#x51FD;&#x6570;&#x5177;&#x4F53;&#x6307;&#x5B9A;&#x63A5;&#x53E3;&#x7EE7;&#x627F;&#x4EE5;&#x53CA;&#x5F3A;&#x5236;&#x6027;&#x5B9E;&#x73B0;&#x7EE7;&#x627F;&#xFF09;</li>
<li>&#x8003;&#x8651; virtual &#x51FD;&#x6570;&#x4EE5;&#x5916;&#x7684;&#x5176;&#x4ED6;&#x9009;&#x62E9;&#xFF08;&#x5982; Template Method &#x8BBE;&#x8BA1;&#x6A21;&#x5F0F;&#x7684; non-virtual interface&#xFF08;NVI&#xFF09;&#x624B;&#x6CD5;&#xFF0C;&#x5C06; virtual &#x51FD;&#x6570;&#x66FF;&#x6362;&#x4E3A; &#x201C;&#x51FD;&#x6570;&#x6307;&#x9488;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x201D;&#xFF0C;&#x4EE5; <code>tr1::function</code> &#x6210;&#x5458;&#x53D8;&#x91CF;&#x66FF;&#x6362; virtual &#x51FD;&#x6570;&#xFF0C;&#x5C06;&#x7EE7;&#x627F;&#x4F53;&#x7CFB;&#x5185;&#x7684; virtual &#x51FD;&#x6570;&#x66FF;&#x6362;&#x4E3A;&#x53E6;&#x4E00;&#x4E2A;&#x7EE7;&#x627F;&#x4F53;&#x7CFB;&#x5185;&#x7684; virtual &#x51FD;&#x6570;&#xFF09;</li>
<li>&#x7EDD;&#x4E0D;&#x91CD;&#x65B0;&#x5B9A;&#x4E49;&#x7EE7;&#x627F;&#x800C;&#x6765;&#x7684; non-virtual &#x51FD;&#x6570;</li>
<li>&#x7EDD;&#x4E0D;&#x91CD;&#x65B0;&#x5B9A;&#x4E49;&#x7EE7;&#x627F;&#x800C;&#x6765;&#x7684;&#x7F3A;&#x7701;&#x53C2;&#x6570;&#x503C;&#xFF0C;&#x56E0;&#x4E3A;&#x7F3A;&#x7701;&#x53C2;&#x6570;&#x503C;&#x662F;&#x9759;&#x6001;&#x7ED1;&#x5B9A;&#xFF08;statically bound&#xFF09;&#xFF0C;&#x800C; virtual &#x51FD;&#x6570;&#x5374;&#x662F;&#x52A8;&#x6001;&#x7ED1;&#x5B9A;&#xFF08;dynamically bound&#xFF09;</li>
<li>&#x901A;&#x8FC7;&#x590D;&#x5408;&#x5851;&#x6A21; has-a&#xFF08;&#x6709;&#x4E00;&#x4E2A;&#xFF09;&#x6216; &#x201C;&#x6839;&#x636E;&#x67D0;&#x7269;&#x5B9E;&#x73B0;&#x51FA;&#x201D;&#xFF08;&#x5728;&#x5E94;&#x7528;&#x57DF;&#xFF08;application domain&#xFF09;&#xFF0C;&#x590D;&#x5408;&#x610F;&#x5473; has-a&#xFF08;&#x6709;&#x4E00;&#x4E2A;&#xFF09;&#xFF1B;&#x5728;&#x5B9E;&#x73B0;&#x57DF;&#xFF08;implementation domain&#xFF09;&#xFF0C;&#x590D;&#x5408;&#x610F;&#x5473;&#x7740; is-implemented-in-terms-of&#xFF08;&#x6839;&#x636E;&#x67D0;&#x7269;&#x5B9E;&#x73B0;&#x51FA;&#xFF09;&#xFF09;</li>
<li>&#x660E;&#x667A;&#x800C;&#x5BA1;&#x614E;&#x5730;&#x4F7F;&#x7528; private &#x7EE7;&#x627F;&#xFF08;private &#x7EE7;&#x627F;&#x610F;&#x5473;&#x7740; is-implemented-in-terms-of&#xFF08;&#x6839;&#x636E;&#x67D0;&#x7269;&#x5B9E;&#x73B0;&#x51FA;&#xFF09;&#xFF0C;&#x5C3D;&#x53EF;&#x80FD;&#x4F7F;&#x7528;&#x590D;&#x5408;&#xFF0C;&#x5F53; derived class &#x9700;&#x8981;&#x8BBF;&#x95EE; protected base class &#x7684;&#x6210;&#x5458;&#xFF0C;&#x6216;&#x9700;&#x8981;&#x91CD;&#x65B0;&#x5B9A;&#x4E49;&#x7EE7;&#x627F;&#x800C;&#x6765;&#x7684;&#x65F6;&#x5019; virtual &#x51FD;&#x6570;&#xFF0C;&#x6216;&#x9700;&#x8981; empty base &#x6700;&#x4F18;&#x5316;&#x65F6;&#xFF0C;&#x624D;&#x4F7F;&#x7528; private &#x7EE7;&#x627F;&#xFF09;</li>
<li>&#x660E;&#x667A;&#x800C;&#x5BA1;&#x614E;&#x5730;&#x4F7F;&#x7528;&#x591A;&#x91CD;&#x7EE7;&#x627F;&#xFF08;&#x591A;&#x7EE7;&#x627F;&#x6BD4;&#x5355;&#x4E00;&#x7EE7;&#x627F;&#x590D;&#x6742;&#xFF0C;&#x53EF;&#x80FD;&#x5BFC;&#x81F4;&#x65B0;&#x7684;&#x6B67;&#x4E49;&#x6027;&#xFF0C;&#x4EE5;&#x53CA;&#x5BF9; virtual &#x7EE7;&#x627F;&#x7684;&#x9700;&#x8981;&#xFF0C;&#x4F46;&#x786E;&#x6709;&#x6B63;&#x5F53;&#x7528;&#x9014;&#xFF0C;&#x5982; &#x201C;public &#x7EE7;&#x627F;&#x67D0;&#x4E2A; interface class&#x201D; &#x548C; &#x201C;private &#x7EE7;&#x627F;&#x67D0;&#x4E2A;&#x534F;&#x52A9;&#x5B9E;&#x73B0;&#x7684; class&#x201D;&#xFF1B;virtual &#x7EE7;&#x627F;&#x53EF;&#x89E3;&#x51B3;&#x591A;&#x7EE7;&#x627F;&#x4E0B;&#x83F1;&#x5F62;&#x7EE7;&#x627F;&#x7684;&#x4E8C;&#x4E49;&#x6027;&#x95EE;&#x9898;&#xFF0C;&#x4F46;&#x4F1A;&#x589E;&#x52A0;&#x5927;&#x5C0F;&#x3001;&#x901F;&#x5EA6;&#x3001;&#x521D;&#x59CB;&#x5316;&#x53CA;&#x8D4B;&#x503C;&#x7684;&#x590D;&#x6742;&#x5EA6;&#x7B49;&#x7B49;&#x6210;&#x672C;&#xFF09;</li>
<li>&#x4E86;&#x89E3;&#x9690;&#x5F0F;&#x63A5;&#x53E3;&#x548C;&#x7F16;&#x8BD1;&#x671F;&#x591A;&#x6001;&#xFF08;class &#x548C; templates &#x90FD;&#x652F;&#x6301;&#x63A5;&#x53E3;&#xFF08;interfaces&#xFF09;&#x548C;&#x591A;&#x6001;&#xFF08;polymorphism&#xFF09;&#xFF1B;class &#x7684;&#x63A5;&#x53E3;&#x662F;&#x4EE5;&#x7B7E;&#x540D;&#x4E3A;&#x4E2D;&#x5FC3;&#x7684;&#x663E;&#x5F0F;&#x7684;&#xFF08;explicit&#xFF09;&#xFF0C;&#x591A;&#x6001;&#x5219;&#x662F;&#x901A;&#x8FC7; virtual &#x51FD;&#x6570;&#x53D1;&#x751F;&#x4E8E;&#x8FD0;&#x884C;&#x671F;&#xFF1B;template &#x7684;&#x63A5;&#x53E3;&#x662F;&#x5960;&#x57FA;&#x4E8E;&#x6709;&#x6548;&#x8868;&#x8FBE;&#x5F0F;&#x7684;&#x9690;&#x5F0F;&#x7684;&#xFF08;implicit&#xFF09;&#xFF0C;&#x591A;&#x6001;&#x5219;&#x662F;&#x901A;&#x8FC7; template &#x5177;&#x73B0;&#x5316;&#x548C;&#x51FD;&#x6570;&#x91CD;&#x8F7D;&#x89E3;&#x6790;&#xFF08;function overloading resolution&#xFF09;&#x53D1;&#x751F;&#x4E8E;&#x7F16;&#x8BD1;&#x671F;&#xFF09;</li>
<li>&#x4E86;&#x89E3; typename &#x7684;&#x53CC;&#x91CD;&#x610F;&#x4E49;&#xFF08;&#x58F0;&#x660E; template &#x7C7B;&#x578B;&#x53C2;&#x6570;&#x662F;&#xFF0C;&#x524D;&#x7F00;&#x5173;&#x952E;&#x5B57; class &#x548C; typename &#x7684;&#x610F;&#x4E49;&#x5B8C;&#x5168;&#x76F8;&#x540C;&#xFF1B;&#x8BF7;&#x4F7F;&#x7528;&#x5173;&#x952E;&#x5B57; typename &#x6807;&#x8BC6;&#x5D4C;&#x5957;&#x4ECE;&#x5C5E;&#x7C7B;&#x578B;&#x540D;&#x79F0;&#xFF0C;&#x4F46;&#x4E0D;&#x5F97;&#x5728;&#x57FA;&#x7C7B;&#x5217;&#xFF08;base class lists&#xFF09;&#x6216;&#x6210;&#x5458;&#x521D;&#x503C;&#x5217;&#xFF08;member initialization list&#xFF09;&#x5185;&#x4EE5;&#x5B83;&#x4F5C;&#x4E3A; base class &#x4FEE;&#x9970;&#x7B26;&#xFF09;</li>
<li>&#x5B66;&#x4E60;&#x5904;&#x7406;&#x6A21;&#x677F;&#x5316;&#x57FA;&#x7C7B;&#x5185;&#x7684;&#x540D;&#x79F0;&#xFF08;&#x53EF;&#x5728; derived class templates &#x5185;&#x901A;&#x8FC7; <code>this-&gt;</code> &#x6307;&#x6D89; base class templates &#x5185;&#x7684;&#x6210;&#x5458;&#x540D;&#x79F0;&#xFF0C;&#x6216;&#x85C9;&#x7531;&#x4E00;&#x4E2A;&#x660E;&#x767D;&#x5199;&#x51FA;&#x7684; &#x201C;base class &#x8D44;&#x683C;&#x4FEE;&#x9970;&#x7B26;&#x201D; &#x5B8C;&#x6210;&#xFF09;</li>
<li>&#x5C06;&#x4E0E;&#x53C2;&#x6570;&#x65E0;&#x5173;&#x7684;&#x4EE3;&#x7801;&#x62BD;&#x79BB; templates&#xFF08;&#x56E0;&#x7C7B;&#x578B;&#x6A21;&#x677F;&#x53C2;&#x6570;&#xFF08;non-type template parameters&#xFF09;&#x800C;&#x9020;&#x6210;&#x4EE3;&#x7801;&#x81A8;&#x80C0;&#x5F80;&#x5F80;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x51FD;&#x6570;&#x53C2;&#x6570;&#x6216; class &#x6210;&#x5458;&#x53D8;&#x91CF;&#x66FF;&#x6362; template &#x53C2;&#x6570;&#x6765;&#x6D88;&#x9664;&#xFF1B;&#x56E0;&#x7C7B;&#x578B;&#x53C2;&#x6570;&#xFF08;type parameters&#xFF09;&#x800C;&#x9020;&#x6210;&#x7684;&#x4EE3;&#x7801;&#x81A8;&#x80C0;&#x5F80;&#x5F80;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x8BA9;&#x5E26;&#x6709;&#x5B8C;&#x5168;&#x76F8;&#x540C;&#x4E8C;&#x8FDB;&#x5236;&#x8868;&#x8FF0;&#xFF08;binary representations&#xFF09;&#x7684;&#x5B9E;&#x73B0;&#x7C7B;&#x578B;&#xFF08;instantiation types&#xFF09;&#x5171;&#x4EAB;&#x5B9E;&#x73B0;&#x7801;&#xFF09;</li>
<li>&#x8FD0;&#x7528;&#x6210;&#x5458;&#x51FD;&#x6570;&#x6A21;&#x677F;&#x63A5;&#x53D7;&#x6240;&#x6709;&#x517C;&#x5BB9;&#x7C7B;&#x578B;&#xFF08;&#x8BF7;&#x4F7F;&#x7528;&#x6210;&#x5458;&#x51FD;&#x6570;&#x6A21;&#x677F;&#xFF08;member function templates&#xFF09;&#x751F;&#x6210; &#x201C;&#x53EF;&#x63A5;&#x53D7;&#x6240;&#x6709;&#x517C;&#x5BB9;&#x7C7B;&#x578B;&#x201D; &#x7684;&#x51FD;&#x6570;&#xFF1B;&#x58F0;&#x660E; member templates &#x7528;&#x4E8E; &#x201C;&#x6CDB;&#x5316; copy &#x6784;&#x9020;&#x201D; &#x6216; &#x201C;&#x6CDB;&#x5316; assignment &#x64CD;&#x4F5C;&#x201D; &#x65F6;&#x8FD8;&#x9700;&#x8981;&#x58F0;&#x660E;&#x6B63;&#x5E38;&#x7684; copy &#x6784;&#x9020;&#x51FD;&#x6570;&#x548C; copy assignment &#x64CD;&#x4F5C;&#x7B26;&#xFF09;</li>
<li>&#x9700;&#x8981;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x65F6;&#x8BF7;&#x4E3A;&#x6A21;&#x677F;&#x5B9A;&#x4E49;&#x975E;&#x6210;&#x5458;&#x51FD;&#x6570;&#xFF08;&#x5F53;&#x6211;&#x4EEC;&#x7F16;&#x5199;&#x4E00;&#x4E2A; class template&#xFF0C;&#x800C;&#x5B83;&#x6240;&#x63D0;&#x4F9B;&#x4E4B; &#x201C;&#x4E0E;&#x6B64; template &#x76F8;&#x5173;&#x7684;&#x201D; &#x51FD;&#x6570;&#x652F;&#x6301; &#x201C;&#x6240;&#x6709;&#x53C2;&#x6570;&#x4E4B;&#x9690;&#x5F0F;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x201D; &#x65F6;&#xFF0C;&#x8BF7;&#x5C06;&#x90A3;&#x4E9B;&#x51FD;&#x6570;&#x5B9A;&#x4E49;&#x4E3A; &#x201C;class template &#x5185;&#x90E8;&#x7684; friend &#x51FD;&#x6570;&#x201D;&#xFF09;</li>
<li>&#x8BF7;&#x4F7F;&#x7528; traits classes &#x8868;&#x73B0;&#x7C7B;&#x578B;&#x4FE1;&#x606F;&#xFF08;traits classes &#x901A;&#x8FC7; templates &#x548C; &#x201C;templates &#x7279;&#x5316;&#x201D; &#x4F7F;&#x5F97; &#x201C;&#x7C7B;&#x578B;&#x76F8;&#x5173;&#x4FE1;&#x606F;&#x201D; &#x5728;&#x7F16;&#x8BD1;&#x671F;&#x53EF;&#x7528;&#xFF0C;&#x901A;&#x8FC7;&#x91CD;&#x8F7D;&#x6280;&#x672F;&#xFF08;overloading&#xFF09;&#x5B9E;&#x73B0;&#x5728;&#x7F16;&#x8BD1;&#x671F;&#x5BF9;&#x7C7B;&#x578B;&#x6267;&#x884C; if...else &#x6D4B;&#x8BD5;&#xFF09;</li>
<li>&#x8BA4;&#x8BC6; template &#x5143;&#x7F16;&#x7A0B;&#xFF08;&#x6A21;&#x677F;&#x5143;&#x7F16;&#x7A0B;&#xFF08;TMP&#xFF0C;template metaprogramming&#xFF09;&#x53EF;&#x5C06;&#x5DE5;&#x4F5C;&#x7531;&#x8FD0;&#x884C;&#x671F;&#x79FB;&#x5F80;&#x7F16;&#x8BD1;&#x671F;&#xFF0C;&#x56E0;&#x6B64;&#x5F97;&#x4EE5;&#x5B9E;&#x73B0;&#x65E9;&#x671F;&#x9519;&#x8BEF;&#x4FA6;&#x6D4B;&#x548C;&#x66F4;&#x9AD8;&#x7684;&#x6267;&#x884C;&#x6548;&#x7387;&#xFF1B;TMP &#x53EF;&#x88AB;&#x7528;&#x6765;&#x751F;&#x6210; &#x201C;&#x7ED9;&#x4E88;&#x653F;&#x7B56;&#x9009;&#x62E9;&#x7EC4;&#x5408;&#x201D;&#xFF08;based on combinations of policy choices&#xFF09;&#x7684;&#x5BA2;&#x6237;&#x5B9A;&#x5236;&#x4EE3;&#x7801;&#xFF0C;&#x4E5F;&#x53EF;&#x7528;&#x6765;&#x907F;&#x514D;&#x751F;&#x6210;&#x5BF9;&#x67D0;&#x4E9B;&#x7279;&#x6B8A;&#x7C7B;&#x578B;&#x5E76;&#x4E0D;&#x9002;&#x5408;&#x7684;&#x4EE3;&#x7801;&#xFF09;</li>
<li>&#x4E86;&#x89E3; new-handler &#x7684;&#x884C;&#x4E3A;&#xFF08;set_new_handler &#x5141;&#x8BB8;&#x5BA2;&#x6237;&#x6307;&#x5B9A;&#x4E00;&#x4E2A;&#x5728;&#x5185;&#x5B58;&#x5206;&#x914D;&#x65E0;&#x6CD5;&#x83B7;&#x5F97;&#x6EE1;&#x8DB3;&#x65F6;&#x88AB;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#xFF1B;nothrow new &#x662F;&#x4E00;&#x4E2A;&#x9887;&#x5177;&#x5C40;&#x9650;&#x7684;&#x5DE5;&#x5177;&#xFF0C;&#x56E0;&#x4E3A;&#x5B83;&#x53EA;&#x9002;&#x7528;&#x4E8E;&#x5185;&#x5B58;&#x5206;&#x914D;&#xFF08;operator new&#xFF09;&#xFF0C;&#x540E;&#x7EE7;&#x7684;&#x6784;&#x9020;&#x51FD;&#x6570;&#x8C03;&#x7528;&#x8FD8;&#x662F;&#x53EF;&#x80FD;&#x629B;&#x51FA;&#x5F02;&#x5E38;&#xFF09;</li>
<li>&#x4E86;&#x89E3; new &#x548C; delete &#x7684;&#x5408;&#x7406;&#x66FF;&#x6362;&#x65F6;&#x673A;&#xFF08;&#x4E3A;&#x4E86;&#x68C0;&#x6D4B;&#x8FD0;&#x7528;&#x9519;&#x8BEF;&#x3001;&#x6536;&#x96C6;&#x52A8;&#x6001;&#x5206;&#x914D;&#x5185;&#x5B58;&#x4E4B;&#x4F7F;&#x7528;&#x7EDF;&#x8BA1;&#x4FE1;&#x606F;&#x3001;&#x589E;&#x52A0;&#x5206;&#x914D;&#x548C;&#x5F52;&#x8FD8;&#x901F;&#x5EA6;&#x3001;&#x964D;&#x4F4E;&#x7F3A;&#x7701;&#x5185;&#x5B58;&#x7BA1;&#x7406;&#x5668;&#x5E26;&#x6765;&#x7684;&#x7A7A;&#x95F4;&#x989D;&#x5916;&#x5F00;&#x9500;&#x3001;&#x5F25;&#x8865;&#x7F3A;&#x7701;&#x5206;&#x914D;&#x5668;&#x4E2D;&#x7684;&#x975E;&#x6700;&#x4F73;&#x9F50;&#x4F4D;&#x3001;&#x5C06;&#x76F8;&#x5173;&#x5BF9;&#x8C61;&#x6210;&#x7C07;&#x96C6;&#x4E2D;&#x3001;&#x83B7;&#x5F97;&#x975E;&#x4F20;&#x7EDF;&#x7684;&#x884C;&#x4E3A;&#xFF09;</li>
<li>&#x7F16;&#x5199; new &#x548C; delete &#x65F6;&#x9700;&#x56FA;&#x5B88;&#x5E38;&#x89C4;&#xFF08;operator new &#x5E94;&#x8BE5;&#x5185;&#x6DB5;&#x4E00;&#x4E2A;&#x65E0;&#x7A77;&#x5FAA;&#x73AF;&#xFF0C;&#x5E76;&#x5728;&#x5176;&#x4E2D;&#x5C1D;&#x8BD5;&#x5206;&#x914D;&#x5185;&#x5B58;&#xFF0C;&#x5982;&#x679C;&#x5B83;&#x65E0;&#x6CD5;&#x6EE1;&#x8DB3;&#x5185;&#x5B58;&#x9700;&#x6C42;&#xFF0C;&#x5C31;&#x5E94;&#x8BE5;&#x8C03;&#x7528; new-handler&#xFF0C;&#x5B83;&#x4E5F;&#x5E94;&#x8BE5;&#x6709;&#x80FD;&#x529B;&#x5904;&#x7406; 0 bytes &#x7533;&#x8BF7;&#xFF0C;class &#x4E13;&#x5C5E;&#x7248;&#x672C;&#x5219;&#x8FD8;&#x5E94;&#x8BE5;&#x5904;&#x7406; &#x201C;&#x6BD4;&#x6B63;&#x786E;&#x5927;&#x5C0F;&#x66F4;&#x5927;&#x7684;&#xFF08;&#x9519;&#x8BEF;&#xFF09;&#x7533;&#x8BF7;&#x201D;&#xFF1B;operator delete &#x5E94;&#x8BE5;&#x5728;&#x6536;&#x5230; null &#x6307;&#x9488;&#x65F6;&#x4E0D;&#x505A;&#x4EFB;&#x4F55;&#x4E8B;&#xFF0C;class &#x4E13;&#x5C5E;&#x7248;&#x672C;&#x5219;&#x8FD8;&#x5E94;&#x8BE5;&#x5904;&#x7406; &#x201C;&#x6BD4;&#x6B63;&#x786E;&#x5927;&#x5C0F;&#x66F4;&#x5927;&#x7684;&#xFF08;&#x9519;&#x8BEF;&#xFF09;&#x7533;&#x8BF7;&#x201D;&#xFF09;</li>
<li>&#x5199;&#x4E86; placement new &#x4E5F;&#x8981;&#x5199; placement delete&#xFF08;&#x5F53;&#x4F60;&#x5199;&#x4E00;&#x4E2A; placement operator new&#xFF0C;&#x8BF7;&#x786E;&#x5B9A;&#x4E5F;&#x5199;&#x51FA;&#x4E86;&#x5BF9;&#x5E94;&#x7684; placement operator delete&#xFF0C;&#x5426;&#x5219;&#x53EF;&#x80FD;&#x4F1A;&#x53D1;&#x751F;&#x9690;&#x5FAE;&#x800C;&#x65F6;&#x65AD;&#x65F6;&#x7EED;&#x7684;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#xFF1B;&#x5F53;&#x4F60;&#x58F0;&#x660E; placement new &#x548C; placement delete&#xFF0C;&#x8BF7;&#x786E;&#x5B9A;&#x4E0D;&#x8981;&#x65E0;&#x610F;&#x8BC6;&#xFF08;&#x975E;&#x6545;&#x610F;&#xFF09;&#x5730;&#x906E;&#x63A9;&#x4E86;&#x5B83;&#x4EEC;&#x5730;&#x6B63;&#x5E38;&#x7248;&#x672C;&#xFF09;</li>
<li>&#x4E0D;&#x8981;&#x8F7B;&#x5FFD;&#x7F16;&#x8BD1;&#x5668;&#x7684;&#x8B66;&#x544A;</li>
<li>&#x8BA9;&#x81EA;&#x5DF1;&#x719F;&#x6089;&#x5305;&#x62EC; TR1 &#x5728;&#x5185;&#x7684;&#x6807;&#x51C6;&#x7A0B;&#x5E8F;&#x5E93;&#xFF08;TR1&#xFF0C;C++ Technical Report 1&#xFF0C;C++11 &#x6807;&#x51C6;&#x7684;&#x8349;&#x7A3F;&#x6587;&#x4EF6;&#xFF09;</li>
<li>&#x8BA9;&#x81EA;&#x5DF1;&#x719F;&#x6089; Boost&#xFF08;&#x51C6;&#x6807;&#x51C6;&#x5E93;&#xFF09;</li>
</ol>
<h3 class="mume-header" id="more-effective-c">More Effective c++</h3>

<ol>
<li>&#x4ED4;&#x7EC6;&#x533A;&#x522B; pointers &#x548C; references&#xFF08;&#x5F53;&#x4F60;&#x77E5;&#x9053;&#x4F60;&#x9700;&#x8981;&#x6307;&#x5411;&#x67D0;&#x4E2A;&#x4E1C;&#x897F;&#xFF0C;&#x800C;&#x4E14;&#x7EDD;&#x4E0D;&#x4F1A;&#x6539;&#x53D8;&#x6307;&#x5411;&#x5176;&#x4ED6;&#x4E1C;&#x897F;&#xFF0C;&#x6216;&#x662F;&#x5F53;&#x4F60;&#x5B9E;&#x73B0;&#x4E00;&#x4E2A;&#x64CD;&#x4F5C;&#x7B26;&#x800C;&#x5176;&#x8BED;&#x6CD5;&#x9700;&#x6C42;&#x65E0;&#x6CD5;&#x7531; pointers &#x8FBE;&#x6210;&#xFF0C;&#x4F60;&#x5C31;&#x5E94;&#x8BE5;&#x9009;&#x62E9; references&#xFF1B;&#x4EFB;&#x4F55;&#x5176;&#x4ED6;&#x65F6;&#x5019;&#xFF0C;&#x8BF7;&#x91C7;&#x7528; pointers&#xFF09;</li>
<li>&#x6700;&#x597D;&#x4F7F;&#x7528; C++ &#x8F6C;&#x578B;&#x64CD;&#x4F5C;&#x7B26;&#xFF08;<code>static_cast</code>&#x3001;<code>const_cast</code>&#x3001;<code>dynamic_cast</code>&#x3001;<code>reinterpret_cast</code>&#xFF09;</li>
<li>&#x7EDD;&#x4E0D;&#x8981;&#x4EE5;&#x591A;&#x6001;&#xFF08;polymorphically&#xFF09;&#x65B9;&#x5F0F;&#x5904;&#x7406;&#x6570;&#x7EC4;&#xFF08;&#x591A;&#x6001;&#xFF08;polymorphism&#xFF09;&#x548C;&#x6307;&#x9488;&#x7B97;&#x672F;&#x4E0D;&#x80FD;&#x6DF7;&#x7528;&#xFF1B;&#x6570;&#x7EC4;&#x5BF9;&#x8C61;&#x51E0;&#x4E4E;&#x603B;&#x662F;&#x4F1A;&#x6D89;&#x53CA;&#x6307;&#x9488;&#x7684;&#x7B97;&#x672F;&#x8FD0;&#x7B97;&#xFF0C;&#x6240;&#x4EE5;&#x6570;&#x7EC4;&#x548C;&#x591A;&#x6001;&#x4E0D;&#x8981;&#x6DF7;&#x7528;&#xFF09;</li>
<li>&#x975E;&#x5FC5;&#x8981;&#x4E0D;&#x63D0;&#x4F9B; default constructor&#xFF08;&#x907F;&#x514D;&#x5BF9;&#x8C61;&#x4E2D;&#x7684;&#x5B57;&#x6BB5;&#x88AB;&#x65E0;&#x610F;&#x4E49;&#x5730;&#x521D;&#x59CB;&#x5316;&#xFF09;</li>
<li>&#x5BF9;&#x5B9A;&#x5236;&#x7684; &#x201C;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x51FD;&#x6570;&#x201D; &#x4FDD;&#x6301;&#x8B66;&#x89C9;&#xFF08;&#x5355;&#x81EA;&#x53D8;&#x91CF; constructors &#x53EF;&#x901A;&#x8FC7;&#x7B80;&#x6613;&#x6CD5;&#xFF08;explicit &#x5173;&#x952E;&#x5B57;&#xFF09;&#x6216;&#x4EE3;&#x7406;&#x7C7B;&#xFF08;proxy classes&#xFF09;&#x6765;&#x907F;&#x514D;&#x7F16;&#x8BD1;&#x5668;&#x8BEF;&#x7528;&#xFF1B;&#x9690;&#x5F0F;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x64CD;&#x4F5C;&#x7B26;&#x53EF;&#x6539;&#x4E3A;&#x663E;&#x5F0F;&#x7684; member function &#x6765;&#x907F;&#x514D;&#x975E;&#x9884;&#x671F;&#x884C;&#x4E3A;&#xFF09;</li>
<li>&#x533A;&#x522B; increment/decrement &#x64CD;&#x4F5C;&#x7B26;&#x7684;&#x524D;&#x7F6E;&#xFF08;prefix&#xFF09;&#x548C;&#x540E;&#x7F6E;&#xFF08;postfix&#xFF09;&#x5F62;&#x5F0F;&#xFF08;&#x524D;&#x7F6E;&#x5F0F;&#x7D2F;&#x52A0;&#x540E;&#x53D6;&#x51FA;&#xFF0C;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A; reference&#xFF1B;&#x540E;&#x7F6E;&#x5F0F;&#x53D6;&#x51FA;&#x540E;&#x7D2F;&#x52A0;&#xFF0C;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A; const &#x5BF9;&#x8C61;&#xFF1B;&#x5904;&#x7406;&#x7528;&#x6237;&#x5B9A;&#x5236;&#x7C7B;&#x578B;&#x65F6;&#xFF0C;&#x5E94;&#x8BE5;&#x5C3D;&#x53EF;&#x80FD;&#x4F7F;&#x7528;&#x524D;&#x7F6E;&#x5F0F; increment&#xFF1B;&#x540E;&#x7F6E;&#x5F0F;&#x7684;&#x5B9E;&#x73B0;&#x5E94;&#x4EE5;&#x5176;&#x524D;&#x7F6E;&#x5F0F;&#x5144;&#x5F1F;&#x4E3A;&#x57FA;&#x7840;&#xFF09;</li>
<li>&#x5343;&#x4E07;&#x4E0D;&#x8981;&#x91CD;&#x8F7D; <code>&amp;&amp;</code>&#xFF0C;<code>||</code> &#x548C; <code>,</code> &#x64CD;&#x4F5C;&#x7B26;&#xFF08;<code>&amp;&amp;</code> &#x4E0E; <code>||</code> &#x7684;&#x91CD;&#x8F7D;&#x4F1A;&#x7528; &#x201C;&#x51FD;&#x6570;&#x8C03;&#x7528;&#x8BED;&#x4E49;&#x201D; &#x53D6;&#x4EE3; &#x201C;&#x9AA4;&#x6B7B;&#x5F0F;&#x8BED;&#x4E49;&#x201D;&#xFF1B;<code>,</code> &#x7684;&#x91CD;&#x8F7D;&#x5BFC;&#x81F4;&#x4E0D;&#x80FD;&#x4FDD;&#x8BC1;&#x5DE6;&#x4FA7;&#x8868;&#x8FBE;&#x5F0F;&#x4E00;&#x5B9A;&#x6BD4;&#x53F3;&#x4FA7;&#x8868;&#x8FBE;&#x5F0F;&#x66F4;&#x65E9;&#x88AB;&#x8BC4;&#x4F30;&#xFF09;</li>
<li>&#x4E86;&#x89E3;&#x5404;&#x79CD;&#x4E0D;&#x540C;&#x610F;&#x4E49;&#x7684; new &#x548C; delete&#xFF08;<code>new operator</code>&#x3001;<code>operator new</code>&#x3001;<code>placement new</code>&#x3001;<code>operator new[]</code>&#xFF1B;<code>delete operator</code>&#x3001;<code>operator delete</code>&#x3001;<code>destructor</code>&#x3001;<code>operator delete[]</code>&#xFF09;</li>
<li>&#x5229;&#x7528; destructors &#x907F;&#x514D;&#x6CC4;&#x6F0F;&#x8D44;&#x6E90;&#xFF08;&#x5728; destructors &#x91CA;&#x653E;&#x8D44;&#x6E90;&#x53EF;&#x4EE5;&#x907F;&#x514D;&#x5F02;&#x5E38;&#x65F6;&#x7684;&#x8D44;&#x6E90;&#x6CC4;&#x6F0F;&#xFF09;</li>
<li>&#x5728; constructors &#x5185;&#x963B;&#x6B62;&#x8D44;&#x6E90;&#x6CC4;&#x6F0F;&#xFF08;&#x7531;&#x4E8E; C++ &#x53EA;&#x4F1A;&#x6790;&#x6784;&#x5DF2;&#x6784;&#x9020;&#x5B8C;&#x6210;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x56E0;&#x6B64;&#x5728;&#x6784;&#x9020;&#x51FD;&#x6570;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; try...catch &#x6216;&#x8005; auto_ptr&#xFF08;&#x4EE5;&#x53CA;&#x4E0E;&#x4E4B;&#x76F8;&#x4F3C;&#x7684; classes&#xFF09; &#x5904;&#x7406;&#x5F02;&#x5E38;&#x65F6;&#x8D44;&#x6E90;&#x6CC4;&#x9732;&#x95EE;&#x9898;&#xFF09;</li>
<li>&#x7981;&#x6B62;&#x5F02;&#x5E38;&#x6D41;&#x51FA; destructors &#x4E4B;&#x5916;&#xFF08;&#x539F;&#x56E0;&#xFF1A;&#x4E00;&#x3001;&#x907F;&#x514D; terminate &#x51FD;&#x6570;&#x5728; exception &#x4F20;&#x64AD;&#x8FC7;&#x7A0B;&#x7684;&#x6808;&#x5C55;&#x5F00;&#xFF08;stack-unwinding&#xFF09;&#x673A;&#x5236;&#x79CD;&#x88AB;&#x8C03;&#x7528;&#xFF1B;&#x4E8C;&#x3001;&#x534F;&#x52A9;&#x786E;&#x4FDD; destructors &#x5B8C;&#x6210;&#x5176;&#x5E94;&#x8BE5;&#x5B8C;&#x6210;&#x7684;&#x6240;&#x6709;&#x4E8B;&#x60C5;&#xFF09;</li>
<li>&#x4E86;&#x89E3; &#x201C;&#x629B;&#x51FA;&#x4E00;&#x4E2A; exception&#x201D; &#x4E0E; &#x201C;&#x4F20;&#x9012;&#x4E00;&#x4E2A;&#x53C2;&#x6570;&#x201D; &#x6216; &#x201C;&#x8C03;&#x7528;&#x4E00;&#x4E2A;&#x865A;&#x51FD;&#x6570;&#x201D; &#x4E4B;&#x95F4;&#x7684;&#x5DEE;&#x5F02;&#xFF08;&#x7B2C;&#x4E00;&#xFF0C;exception objects &#x603B;&#x662F;&#x4F1A;&#x88AB;&#x590D;&#x5236;&#xFF08;by pointer &#x9664;&#x5916;&#xFF09;&#xFF0C;&#x5982;&#x679C;&#x4EE5; by value &#x65B9;&#x5F0F;&#x6355;&#x6349;&#x751A;&#x81F3;&#x88AB;&#x590D;&#x5236;&#x4E24;&#x6B21;&#xFF0C;&#x800C;&#x4F20;&#x9012;&#x7ED9;&#x51FD;&#x6570;&#x53C2;&#x6570;&#x7684;&#x5BF9;&#x8C61;&#x5219;&#x4E0D;&#x4E00;&#x5B9A;&#x5F97;&#x590D;&#x5236;&#xFF1B;&#x7B2C;&#x4E8C;&#xFF0C;&#x201C;&#x88AB;&#x629B;&#x51FA;&#x6210;&#x4E3A; exceptions&#x201D; &#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x5176;&#x88AB;&#x5141;&#x8BB8;&#x7684;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x52A8;&#x4F5C;&#x6BD4; &#x201C;&#x88AB;&#x4F20;&#x9012;&#x5230;&#x51FD;&#x6570;&#x53BB;&#x201D; &#x7684;&#x5BF9;&#x8C61;&#x5C11;&#xFF1B;&#x7B2C;&#x4E09;&#xFF0C;catch &#x5B50;&#x53E5;&#x4EE5;&#x5176; &#x201C;&#x51FA;&#x73B0;&#x4E8E;&#x6E90;&#x4EE3;&#x7801;&#x7684;&#x987A;&#x5E8F;&#x201D; &#x88AB;&#x7F16;&#x8BD1;&#x5668;&#x68C0;&#x9A8C;&#x5BF9;&#x6BD4;&#xFF0C;&#x5176;&#x4E2D;&#x7B2C;&#x4E00;&#x4E2A;&#x5339;&#x914D;&#x6210;&#x529F;&#x8005;&#x4FBF;&#x6267;&#x884C;&#xFF0C;&#x800C;&#x8C03;&#x7528;&#x4E00;&#x4E2A;&#x865A;&#x51FD;&#x6570;&#xFF0C;&#x88AB;&#x9009;&#x4E2D;&#x6267;&#x884C;&#x7684;&#x662F;&#x90A3;&#x4E2A; &#x201C;&#x4E0E;&#x5BF9;&#x8C61;&#x7C7B;&#x578B;&#x6700;&#x4F73;&#x543B;&#x5408;&#x201D; &#x7684;&#x51FD;&#x6570;&#xFF09;</li>
<li>&#x4EE5; by reference &#x65B9;&#x5F0F;&#x6355;&#x83B7; exceptions&#xFF08;&#x53EF;&#x907F;&#x514D;&#x5BF9;&#x8C61;&#x5220;&#x9664;&#x95EE;&#x9898;&#x3001;exception objects &#x7684;&#x5207;&#x5272;&#x95EE;&#x9898;&#xFF0C;&#x53EF;&#x4FDD;&#x7559;&#x6355;&#x6349;&#x6807;&#x51C6; exceptions &#x7684;&#x80FD;&#x529B;&#xFF0C;&#x53EF;&#x7EA6;&#x675F; exception object &#x9700;&#x8981;&#x590D;&#x5236;&#x7684;&#x6B21;&#x6570;&#xFF09;</li>
<li>&#x660E;&#x667A;&#x8FD0;&#x7528; exception specifications&#xFF08;exception specifications &#x5BF9; &#x201C;&#x51FD;&#x6570;&#x5E0C;&#x671B;&#x629B;&#x51FA;&#x4EC0;&#x4E48;&#x6837;&#x7684; exceptions&#x201D; &#x63D0;&#x4F9B;&#x4E86;&#x5353;&#x8D8A;&#x7684;&#x8BF4;&#x660E;&#xFF1B;&#x4E5F;&#x6709;&#x4E00;&#x4E9B;&#x7F3A;&#x70B9;&#xFF0C;&#x5305;&#x62EC;&#x7F16;&#x8BD1;&#x5668;&#x53EA;&#x5BF9;&#x5B83;&#x4EEC;&#x505A;&#x5C40;&#x90E8;&#x6027;&#x68C0;&#x9A8C;&#x800C;&#x5F88;&#x5BB9;&#x6613;&#x4E0D;&#x7ECF;&#x610F;&#x5730;&#x8FDD;&#x53CD;&#xFF0C;&#x4E0E;&#x53EF;&#x80FD;&#x4F1A;&#x59A8;&#x788D;&#x66F4;&#x4E0A;&#x5C42;&#x7684; exception &#x5904;&#x7406;&#x51FD;&#x6570;&#x5904;&#x7406;&#x672A;&#x9884;&#x671F;&#x7684; exceptions&#xFF09;</li>
<li>&#x4E86;&#x89E3;&#x5F02;&#x5E38;&#x5904;&#x7406;&#x7684;&#x6210;&#x672C;&#xFF08;&#x7C97;&#x7565;&#x4F30;&#x8BA1;&#xFF0C;&#x5982;&#x679C;&#x4F7F;&#x7528; try &#x8BED;&#x53E5;&#x5757;&#xFF0C;&#x4EE3;&#x7801;&#x5927;&#x7EA6;&#x6574;&#x4F53;&#x81A8;&#x80C0; 5%-10%&#xFF0C;&#x6267;&#x884C;&#x901F;&#x5EA6;&#x4EA6;&#x5927;&#x7EA6;&#x4E0B;&#x964D;&#x8FD9;&#x4E2A;&#x6570;&#xFF1B;&#x56E0;&#x6B64;&#x8BF7;&#x5C06;&#x4F60;&#x5BF9; try &#x8BED;&#x53E5;&#x5757;&#x548C; exception specifications &#x7684;&#x4F7F;&#x7528;&#x9650;&#x5236;&#x4E8E;&#x975E;&#x7528;&#x4E0D;&#x53EF;&#x7684;&#x5730;&#x70B9;&#xFF0C;&#x5E76;&#x4E14;&#x5728;&#x771F;&#x6B63;&#x5F02;&#x5E38;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x624D;&#x629B;&#x51FA; exceptions&#xFF09;</li>
<li>&#x8C28;&#x8BB0; 80-20 &#x6CD5;&#x5219;&#xFF08;&#x8F6F;&#x4EF6;&#x7684;&#x6574;&#x4F53;&#x6027;&#x80FD;&#x51E0;&#x4E4E;&#x603B;&#x662F;&#x7531;&#x5176;&#x6784;&#x6210;&#x8981;&#x7D20;&#xFF08;&#x4EE3;&#x7801;&#xFF09;&#x7684;&#x4E00;&#x5C0F;&#x90E8;&#x5206;&#x51B3;&#x5B9A;&#x7684;&#xFF0C;&#x53EF;&#x4F7F;&#x7528;&#x7A0B;&#x5E8F;&#x5206;&#x6790;&#x5668;&#xFF08;program profiler&#xFF09;&#x8BC6;&#x522B;&#x51FA;&#x6D88;&#x8017;&#x8D44;&#x6E90;&#x7684;&#x4EE3;&#x7801;&#xFF09;</li>
<li>&#x8003;&#x8651;&#x4F7F;&#x7528; lazy evaluation&#xFF08;&#x7F13;&#x5F0F;&#x8BC4;&#x4F30;&#xFF09;&#xFF08;&#x53EF;&#x5E94;&#x7528;&#x4E8E;&#xFF1A;Reference Counting&#xFF08;&#x5F15;&#x7528;&#x8BA1;&#x6570;&#xFF09;&#x6765;&#x907F;&#x514D;&#x975E;&#x5FC5;&#x8981;&#x7684;&#x5BF9;&#x8C61;&#x590D;&#x5236;&#x3001;&#x533A;&#x5206; operator[] &#x7684;&#x8BFB;&#x548C;&#x5199;&#x52A8;&#x4F5C;&#x6765;&#x505A;&#x4E0D;&#x540C;&#x7684;&#x4E8B;&#x60C5;&#x3001;Lazy Fetching&#xFF08;&#x7F13;&#x5F0F;&#x53D6;&#x51FA;&#xFF09;&#x6765;&#x907F;&#x514D;&#x975E;&#x5FC5;&#x8981;&#x7684;&#x6570;&#x636E;&#x5E93;&#x8BFB;&#x53D6;&#x52A8;&#x4F5C;&#x3001;Lazy Expression Evaluation&#xFF08;&#x8868;&#x8FBE;&#x5F0F;&#x7F13;&#x8BC4;&#x4F30;&#xFF09;&#x6765;&#x907F;&#x514D;&#x975E;&#x5FC5;&#x8981;&#x7684;&#x6570;&#x503C;&#x8BA1;&#x7B97;&#x52A8;&#x4F5C;&#xFF09;</li>
<li>&#x5206;&#x671F;&#x644A;&#x8FD8;&#x9884;&#x671F;&#x7684;&#x8BA1;&#x7B97;&#x6210;&#x672C;&#xFF08;&#x5F53;&#x4F60;&#x5FC5;&#x987B;&#x652F;&#x6301;&#x67D0;&#x4E9B;&#x8FD0;&#x7B97;&#x800C;&#x5176;&#x7ED3;&#x6784;&#x51E0;&#x4E4E;&#x603B;&#x662F;&#x88AB;&#x9700;&#x8981;&#xFF0C;&#x6216;&#x5176;&#x7ED3;&#x679C;&#x5E38;&#x5E38;&#x88AB;&#x591A;&#x6B21;&#x9700;&#x8981;&#x7684;&#x65F6;&#x5019;&#xFF0C;over-eager evaluation&#xFF08;&#x8D85;&#x6025;&#x8BC4;&#x4F30;&#xFF09;&#x53EF;&#x4EE5;&#x6539;&#x5584;&#x7A0B;&#x5E8F;&#x6548;&#x7387;&#xFF09;</li>
</ol>
<h3 class="mume-header" id="google-c-style-guide">Google C++ Style Guide</h3>

<ul>
<li>&#x82F1;&#x6587;&#xFF1A;<a href="https://google.github.io/styleguide/cppguide.html">Google C++ Style Guide</a></li>
<li>&#x4E2D;&#x6587;&#xFF1A;<a href="https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/contents/">C++ &#x98CE;&#x683C;&#x6307;&#x5357;</a></li>
</ul>
<h3 class="mume-header" id="%E5%85%B6%E4%BB%96">&#x5176;&#x4ED6;</h3>

<ul>
<li><a href="http://www.stroustrup.com/bs_faq.html">Bjarne Stroustrup &#x7684;&#x5E38;&#x89C1;&#x95EE;&#x9898;</a></li>
<li><a href="http://www.stroustrup.com/bs_faq2.html">Bjarne Stroustrup &#x7684; C++ &#x98CE;&#x683C;&#x548C;&#x6280;&#x5DE7;&#x5E38;&#x89C1;&#x95EE;&#x9898;</a></li>
</ul>
<p><a id="stl" href></a></p>
<h2 class="mume-header" id="stl">&#x1F4E6; STL</h2>

<h3 class="mume-header" id="stl-%E7%B4%A2%E5%BC%95">STL &#x7D22;&#x5F15;</h3>

<p><a href="https://github.com/huihut/interview/tree/master/STL">STL &#x65B9;&#x6CD5;&#x542B;&#x4E49;&#x7D22;&#x5F15;</a></p>
<h3 class="mume-header" id="stl-%E5%AE%B9%E5%99%A8">STL &#x5BB9;&#x5668;</h3>

<table>
<thead>
<tr>
<th>&#x5BB9;&#x5668;</th>
<th>&#x5E95;&#x5C42;&#x6570;&#x636E;&#x7ED3;&#x6784;</th>
<th>&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;</th>
<th>&#x6709;&#x65E0;&#x5E8F;</th>
<th>&#x53EF;&#x4E0D;&#x53EF;&#x91CD;&#x590D;</th>
<th>&#x5176;&#x4ED6;</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/huihut/interview/tree/master/STL#array">array</a></td>
<td>&#x6570;&#x7EC4;</td>
<td>&#x968F;&#x673A;&#x8BFB;&#x6539; O(1)</td>
<td>&#x65E0;&#x5E8F;</td>
<td>&#x53EF;&#x91CD;&#x590D;</td>
<td>&#x652F;&#x6301;&#x968F;&#x673A;&#x8BBF;&#x95EE;</td>
</tr>
<tr>
<td><a href="https://github.com/huihut/interview/tree/master/STL#vector">vector</a></td>
<td>&#x6570;&#x7EC4;</td>
<td>&#x968F;&#x673A;&#x8BFB;&#x6539;&#x3001;&#x5C3E;&#x90E8;&#x63D2;&#x5165;&#x3001;&#x5C3E;&#x90E8;&#x5220;&#x9664; O(1)<br>&#x5934;&#x90E8;&#x63D2;&#x5165;&#x3001;&#x5934;&#x90E8;&#x5220;&#x9664; O(n)</td>
<td>&#x65E0;&#x5E8F;</td>
<td>&#x53EF;&#x91CD;&#x590D;</td>
<td>&#x652F;&#x6301;&#x968F;&#x673A;&#x8BBF;&#x95EE;</td>
</tr>
<tr>
<td><a href="https://github.com/huihut/interview/tree/master/STL#deque">deque</a></td>
<td>&#x53CC;&#x7AEF;&#x961F;&#x5217;</td>
<td>&#x5934;&#x5C3E;&#x63D2;&#x5165;&#x3001;&#x5934;&#x5C3E;&#x5220;&#x9664; O(1)</td>
<td>&#x65E0;&#x5E8F;</td>
<td>&#x53EF;&#x91CD;&#x590D;</td>
<td>&#x4E00;&#x4E2A;&#x4E2D;&#x592E;&#x63A7;&#x5236;&#x5668; + &#x591A;&#x4E2A;&#x7F13;&#x51B2;&#x533A;&#xFF0C;&#x652F;&#x6301;&#x9996;&#x5C3E;&#x5FEB;&#x901F;&#x589E;&#x5220;&#xFF0C;&#x652F;&#x6301;&#x968F;&#x673A;&#x8BBF;&#x95EE;</td>
</tr>
<tr>
<td><a href="https://github.com/huihut/interview/tree/master/STL#forward_list">forward_list</a></td>
<td>&#x5355;&#x5411;&#x94FE;&#x8868;</td>
<td>&#x63D2;&#x5165;&#x3001;&#x5220;&#x9664; O(1)</td>
<td>&#x65E0;&#x5E8F;</td>
<td>&#x53EF;&#x91CD;&#x590D;</td>
<td>&#x4E0D;&#x652F;&#x6301;&#x968F;&#x673A;&#x8BBF;&#x95EE;</td>
</tr>
<tr>
<td><a href="https://github.com/huihut/interview/tree/master/STL#list">list</a></td>
<td>&#x53CC;&#x5411;&#x94FE;&#x8868;</td>
<td>&#x63D2;&#x5165;&#x3001;&#x5220;&#x9664; O(1)</td>
<td>&#x65E0;&#x5E8F;</td>
<td>&#x53EF;&#x91CD;&#x590D;</td>
<td>&#x4E0D;&#x652F;&#x6301;&#x968F;&#x673A;&#x8BBF;&#x95EE;</td>
</tr>
<tr>
<td><a href="https://github.com/huihut/interview/tree/master/STL#stack">stack</a></td>
<td>deque / list</td>
<td>&#x9876;&#x90E8;&#x63D2;&#x5165;&#x3001;&#x9876;&#x90E8;&#x5220;&#x9664; O(1)</td>
<td>&#x65E0;&#x5E8F;</td>
<td>&#x53EF;&#x91CD;&#x590D;</td>
<td>deque &#x6216; list &#x5C01;&#x95ED;&#x5934;&#x7AEF;&#x5F00;&#x53E3;&#xFF0C;&#x4E0D;&#x7528; vector &#x7684;&#x539F;&#x56E0;&#x5E94;&#x8BE5;&#x662F;&#x5BB9;&#x91CF;&#x5927;&#x5C0F;&#x6709;&#x9650;&#x5236;&#xFF0C;&#x6269;&#x5BB9;&#x8017;&#x65F6;</td>
</tr>
<tr>
<td><a href="https://github.com/huihut/interview/tree/master/STL#queue">queue</a></td>
<td>deque / list</td>
<td>&#x5C3E;&#x90E8;&#x63D2;&#x5165;&#x3001;&#x5934;&#x90E8;&#x5220;&#x9664; O(1)</td>
<td>&#x65E0;&#x5E8F;</td>
<td>&#x53EF;&#x91CD;&#x590D;</td>
<td>deque &#x6216; list &#x5C01;&#x95ED;&#x5934;&#x7AEF;&#x5F00;&#x53E3;&#xFF0C;&#x4E0D;&#x7528; vector &#x7684;&#x539F;&#x56E0;&#x5E94;&#x8BE5;&#x662F;&#x5BB9;&#x91CF;&#x5927;&#x5C0F;&#x6709;&#x9650;&#x5236;&#xFF0C;&#x6269;&#x5BB9;&#x8017;&#x65F6;</td>
</tr>
<tr>
<td><a href="https://github.com/huihut/interview/tree/master/STL#priority_queue">priority_queue</a></td>
<td>vector + max-heap</td>
<td>&#x63D2;&#x5165;&#x3001;&#x5220;&#x9664; O(log<sub>2</sub>n)</td>
<td>&#x6709;&#x5E8F;</td>
<td>&#x53EF;&#x91CD;&#x590D;</td>
<td>vector&#x5BB9;&#x5668;+heap&#x5904;&#x7406;&#x89C4;&#x5219;</td>
</tr>
<tr>
<td><a href="https://github.com/huihut/interview/tree/master/STL#set">set</a></td>
<td>&#x7EA2;&#x9ED1;&#x6811;</td>
<td>&#x63D2;&#x5165;&#x3001;&#x5220;&#x9664;&#x3001;&#x67E5;&#x627E; O(log<sub>2</sub>n)</td>
<td>&#x6709;&#x5E8F;</td>
<td colspan="2">&#x4E0D;&#x53EF;&#x91CD;&#x590D;</td>

</tr>
<tr>
<td><a href="https://github.com/huihut/interview/tree/master/STL#multiset">multiset</a></td>
<td>&#x7EA2;&#x9ED1;&#x6811;</td>
<td>&#x63D2;&#x5165;&#x3001;&#x5220;&#x9664;&#x3001;&#x67E5;&#x627E; O(log<sub>2</sub>n)</td>
<td>&#x6709;&#x5E8F;</td>
<td colspan="2">&#x53EF;&#x91CD;&#x590D;</td>

</tr>
<tr>
<td><a href="https://github.com/huihut/interview/tree/master/STL#map">map</a></td>
<td>&#x7EA2;&#x9ED1;&#x6811;</td>
<td>&#x63D2;&#x5165;&#x3001;&#x5220;&#x9664;&#x3001;&#x67E5;&#x627E; O(log<sub>2</sub>n)</td>
<td>&#x6709;&#x5E8F;</td>
<td colspan="2">&#x4E0D;&#x53EF;&#x91CD;&#x590D;</td>

</tr>
<tr>
<td><a href="https://github.com/huihut/interview/tree/master/STL#multimap">multimap</a></td>
<td>&#x7EA2;&#x9ED1;&#x6811;</td>
<td>&#x63D2;&#x5165;&#x3001;&#x5220;&#x9664;&#x3001;&#x67E5;&#x627E; O(log<sub>2</sub>n)</td>
<td>&#x6709;&#x5E8F;</td>
<td colspan="2">&#x53EF;&#x91CD;&#x590D;</td>

</tr>
<tr>
<td><a href="https://github.com/huihut/interview/tree/master/STL#unordered_set">unordered_set</a></td>
<td>&#x54C8;&#x5E0C;&#x8868;</td>
<td>&#x63D2;&#x5165;&#x3001;&#x5220;&#x9664;&#x3001;&#x67E5;&#x627E; O(1) &#x6700;&#x5DEE; O(n)</td>
<td>&#x65E0;&#x5E8F;</td>
<td colspan="2">&#x4E0D;&#x53EF;&#x91CD;&#x590D;</td>

</tr>
<tr>
<td><a href="https://github.com/huihut/interview/tree/master/STL#unordered_multiset">unordered_multiset</a></td>
<td>&#x54C8;&#x5E0C;&#x8868;</td>
<td>&#x63D2;&#x5165;&#x3001;&#x5220;&#x9664;&#x3001;&#x67E5;&#x627E; O(1) &#x6700;&#x5DEE; O(n)</td>
<td>&#x65E0;&#x5E8F;</td>
<td colspan="2">&#x53EF;&#x91CD;&#x590D;</td>

</tr>
<tr>
<td><a href="https://github.com/huihut/interview/tree/master/STL#unordered_map">unordered_map</a></td>
<td>&#x54C8;&#x5E0C;&#x8868;</td>
<td>&#x63D2;&#x5165;&#x3001;&#x5220;&#x9664;&#x3001;&#x67E5;&#x627E; O(1) &#x6700;&#x5DEE; O(n)</td>
<td>&#x65E0;&#x5E8F;</td>
<td colspan="2">&#x4E0D;&#x53EF;&#x91CD;&#x590D;</td>

</tr>
<tr>
<td><a href="https://github.com/huihut/interview/tree/master/STL#unordered_multimap">unordered_multimap</a></td>
<td>&#x54C8;&#x5E0C;&#x8868;</td>
<td>&#x63D2;&#x5165;&#x3001;&#x5220;&#x9664;&#x3001;&#x67E5;&#x627E; O(1) &#x6700;&#x5DEE; O(n)</td>
<td>&#x65E0;&#x5E8F;</td>
<td colspan="2">&#x53EF;&#x91CD;&#x590D;</td>

</tr>
</tbody>
</table>
<h3 class="mume-header" id="stl-%E7%AE%97%E6%B3%95">STL &#x7B97;&#x6CD5;</h3>

<table>
<thead>
<tr>
<th>&#x7B97;&#x6CD5;</th>
<th>&#x5E95;&#x5C42;&#x7B97;&#x6CD5;</th>
<th>&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;</th>
<th>&#x53EF;&#x4E0D;&#x53EF;&#x91CD;&#x590D;</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="http://www.cplusplus.com/reference/algorithm/find/">find</a></td>
<td>&#x987A;&#x5E8F;&#x67E5;&#x627E;</td>
<td>O(n)</td>
<td>&#x53EF;&#x91CD;&#x590D;</td>
</tr>
<tr>
<td><a href="https://github.com/gcc-mirror/gcc/blob/master/libstdc++-v3/include/bits/stl_algo.h#L4808">sort</a></td>
<td><a href="https://en.wikipedia.org/wiki/Introsort">&#x5185;&#x7701;&#x6392;&#x5E8F;</a></td>
<td>O(n*log<sub>2</sub>n)</td>
<td>&#x53EF;&#x91CD;&#x590D;</td>
</tr>
</tbody>
</table>
<p><a id="data-structure" href></a></p>
<h2 class="mume-header" id="%EF%B8%8F-%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84">&#x303D;&#xFE0F; &#x6570;&#x636E;&#x7ED3;&#x6784;</h2>

<h3 class="mume-header" id="%E9%A1%BA%E5%BA%8F%E7%BB%93%E6%9E%84">&#x987A;&#x5E8F;&#x7ED3;&#x6784;</h3>

<h4 class="mume-header" id="%E9%A1%BA%E5%BA%8F%E6%A0%88sequence-stack">&#x987A;&#x5E8F;&#x6808;&#xFF08;Sequence Stack&#xFF09;</h4>

<p><a href="DataStructure/SqStack.cpp">SqStack.cpp</a></p>
<p>&#x987A;&#x5E8F;&#x6808;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x548C;&#x56FE;&#x7247;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token punctuation">{</span>
	ElemType <span class="token operator">*</span>elem<span class="token punctuation">;</span>
	<span class="token keyword">int</span> top<span class="token punctuation">;</span>
	<span class="token keyword">int</span> size<span class="token punctuation">;</span>
	<span class="token keyword">int</span> increment<span class="token punctuation">;</span>
<span class="token punctuation">}</span> SqStack<span class="token punctuation">;</span>
</pre><p><img src="https://gitee.com/huihut/interview/raw/master/images/SqStack.png" alt></p>
<h4 class="mume-header" id="%E9%98%9F%E5%88%97sequence-queue">&#x961F;&#x5217;&#xFF08;Sequence Queue&#xFF09;</h4>

<p>&#x961F;&#x5217;&#x6570;&#x636E;&#x7ED3;&#x6784;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token punctuation">{</span>
	ElemType <span class="token operator">*</span> elem<span class="token punctuation">;</span>
	<span class="token keyword">int</span> front<span class="token punctuation">;</span>
	<span class="token keyword">int</span> rear<span class="token punctuation">;</span>
	<span class="token keyword">int</span> maxSize<span class="token punctuation">;</span>
<span class="token punctuation">}</span>SqQueue<span class="token punctuation">;</span>
</pre><h5 class="mume-header" id="%E9%9D%9E%E5%BE%AA%E7%8E%AF%E9%98%9F%E5%88%97">&#x975E;&#x5FAA;&#x73AF;&#x961F;&#x5217;</h5>

<p>&#x975E;&#x5FAA;&#x73AF;&#x961F;&#x5217;&#x56FE;&#x7247;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/SqQueue.png" alt></p>
<p><code>SqQueue.rear++</code></p>
<h5 class="mume-header" id="%E5%BE%AA%E7%8E%AF%E9%98%9F%E5%88%97">&#x5FAA;&#x73AF;&#x961F;&#x5217;</h5>

<p>&#x5FAA;&#x73AF;&#x961F;&#x5217;&#x56FE;&#x7247;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/SqLoopStack.png" alt></p>
<p><code>SqQueue.rear = (SqQueue.rear + 1) % SqQueue.maxSize</code></p>
<h4 class="mume-header" id="%E9%A1%BA%E5%BA%8F%E8%A1%A8sequence-list">&#x987A;&#x5E8F;&#x8868;&#xFF08;Sequence List&#xFF09;</h4>

<p><a href="DataStructure/SqList.cpp">SqList.cpp</a></p>
<p>&#x987A;&#x5E8F;&#x8868;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x548C;&#x56FE;&#x7247;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token punctuation">{</span>
	ElemType <span class="token operator">*</span>elem<span class="token punctuation">;</span>
	<span class="token keyword">int</span> length<span class="token punctuation">;</span>
	<span class="token keyword">int</span> size<span class="token punctuation">;</span>
	<span class="token keyword">int</span> increment<span class="token punctuation">;</span>
<span class="token punctuation">}</span> SqList<span class="token punctuation">;</span>
</pre><p><img src="https://gitee.com/huihut/interview/raw/master/images/SqList.png" alt></p>
<h3 class="mume-header" id="%E9%93%BE%E5%BC%8F%E7%BB%93%E6%9E%84">&#x94FE;&#x5F0F;&#x7ED3;&#x6784;</h3>

<p><a href="DataStructure/LinkList.cpp">LinkList.cpp</a></p>
<p><a href="DataStructure/LinkList_with_head.cpp">LinkList_with_head.cpp</a></p>
<p>&#x94FE;&#x5F0F;&#x6570;&#x636E;&#x7ED3;&#x6784;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token class-name">LNode</span> <span class="token punctuation">{</span>
    ElemType data<span class="token punctuation">;</span>
    <span class="token keyword">struct</span> <span class="token class-name">LNode</span> <span class="token operator">*</span>next<span class="token punctuation">;</span>
<span class="token punctuation">}</span> LNode<span class="token punctuation">,</span> <span class="token operator">*</span>LinkList<span class="token punctuation">;</span> 
</pre><h4 class="mume-header" id="%E9%93%BE%E9%98%9F%E5%88%97link-queue">&#x94FE;&#x961F;&#x5217;&#xFF08;Link Queue&#xFF09;</h4>

<p>&#x94FE;&#x961F;&#x5217;&#x56FE;&#x7247;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/LinkQueue.png" alt></p>
<h4 class="mume-header" id="%E7%BA%BF%E6%80%A7%E8%A1%A8%E7%9A%84%E9%93%BE%E5%BC%8F%E8%A1%A8%E7%A4%BA">&#x7EBF;&#x6027;&#x8868;&#x7684;&#x94FE;&#x5F0F;&#x8868;&#x793A;</h4>

<h5 class="mume-header" id="%E5%8D%95%E9%93%BE%E8%A1%A8link-list">&#x5355;&#x94FE;&#x8868;&#xFF08;Link List&#xFF09;</h5>

<p>&#x5355;&#x94FE;&#x8868;&#x56FE;&#x7247;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/LinkList.png" alt></p>
<h5 class="mume-header" id="%E5%8F%8C%E5%90%91%E9%93%BE%E8%A1%A8du-link-list">&#x53CC;&#x5411;&#x94FE;&#x8868;&#xFF08;Du-Link-List&#xFF09;</h5>

<p>&#x53CC;&#x5411;&#x94FE;&#x8868;&#x56FE;&#x7247;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/DuLinkList.png" alt></p>
<h5 class="mume-header" id="%E5%BE%AA%E7%8E%AF%E9%93%BE%E8%A1%A8cir-link-list">&#x5FAA;&#x73AF;&#x94FE;&#x8868;&#xFF08;Cir-Link-List&#xFF09;</h5>

<p>&#x5FAA;&#x73AF;&#x94FE;&#x8868;&#x56FE;&#x7247;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/CirLinkList.png" alt></p>
<h3 class="mume-header" id="%E5%93%88%E5%B8%8C%E8%A1%A8">&#x54C8;&#x5E0C;&#x8868;</h3>

<p><a href="DataStructure/HashTable.cpp">HashTable.cpp</a></p>
<h4 class="mume-header" id="%E6%A6%82%E5%BF%B5">&#x6982;&#x5FF5;</h4>

<p>&#x54C8;&#x5E0C;&#x51FD;&#x6570;&#xFF1A;<code>H(key): K -&gt; D , key &#x2208; K</code></p>
<h4 class="mume-header" id="%E6%9E%84%E9%80%A0%E6%96%B9%E6%B3%95">&#x6784;&#x9020;&#x65B9;&#x6CD5;</h4>

<ul>
<li>&#x76F4;&#x63A5;&#x5B9A;&#x5740;&#x6CD5;</li>
<li>&#x9664;&#x7559;&#x4F59;&#x6570;&#x6CD5;</li>
<li>&#x6570;&#x5B57;&#x5206;&#x6790;&#x6CD5;</li>
<li>&#x6298;&#x53E0;&#x6CD5;</li>
<li>&#x5E73;&#x65B9;&#x53D6;&#x4E2D;&#x6CD5;</li>
</ul>
<h4 class="mume-header" id="%E5%86%B2%E7%AA%81%E5%A4%84%E7%90%86%E6%96%B9%E6%B3%95">&#x51B2;&#x7A81;&#x5904;&#x7406;&#x65B9;&#x6CD5;</h4>

<ul>
<li>&#x94FE;&#x5730;&#x5740;&#x6CD5;&#xFF1A;key &#x76F8;&#x540C;&#x7684;&#x7528;&#x5355;&#x94FE;&#x8868;&#x94FE;&#x63A5;</li>
<li>&#x5F00;&#x653E;&#x5B9A;&#x5740;&#x6CD5;
<ul>
<li>&#x7EBF;&#x6027;&#x63A2;&#x6D4B;&#x6CD5;&#xFF1A;key &#x76F8;&#x540C; -&gt; &#x653E;&#x5230; key &#x7684;&#x4E0B;&#x4E00;&#x4E2A;&#x4F4D;&#x7F6E;&#xFF0C;<code>Hi = (H(key) + i) % m</code></li>
<li>&#x4E8C;&#x6B21;&#x63A2;&#x6D4B;&#x6CD5;&#xFF1A;key &#x76F8;&#x540C; -&gt; &#x653E;&#x5230; <code>Di = 1^2, -1^2, ..., &#xB1;&#xFF08;k)^2,(k&lt;=m/2&#xFF09;</code></li>
<li>&#x968F;&#x673A;&#x63A2;&#x6D4B;&#x6CD5;&#xFF1A;<code>H = (H(key) + &#x4F2A;&#x968F;&#x673A;&#x6570;) % m</code></li>
</ul>
</li>
</ul>
<h4 class="mume-header" id="%E7%BA%BF%E6%80%A7%E6%8E%A2%E6%B5%8B%E7%9A%84%E5%93%88%E5%B8%8C%E8%A1%A8%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84">&#x7EBF;&#x6027;&#x63A2;&#x6D4B;&#x7684;&#x54C8;&#x5E0C;&#x8868;&#x6570;&#x636E;&#x7ED3;&#x6784;</h4>

<p>&#x7EBF;&#x6027;&#x63A2;&#x6D4B;&#x7684;&#x54C8;&#x5E0C;&#x8868;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x548C;&#x56FE;&#x7247;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">typedef</span> <span class="token keyword">char</span> KeyType<span class="token punctuation">;</span>

<span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token punctuation">{</span>
	KeyType key<span class="token punctuation">;</span>
<span class="token punctuation">}</span>RcdType<span class="token punctuation">;</span>

<span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token punctuation">{</span>
	RcdType <span class="token operator">*</span>rcd<span class="token punctuation">;</span>
	<span class="token keyword">int</span> size<span class="token punctuation">;</span>
	<span class="token keyword">int</span> count<span class="token punctuation">;</span>
	<span class="token keyword">bool</span> <span class="token operator">*</span>tag<span class="token punctuation">;</span>
<span class="token punctuation">}</span>HashTable<span class="token punctuation">;</span>
</pre><p><img src="https://gitee.com/huihut/interview/raw/master/images/HashTable.png" alt></p>
<h3 class="mume-header" id="%E9%80%92%E5%BD%92">&#x9012;&#x5F52;</h3>

<h4 class="mume-header" id="%E6%A6%82%E5%BF%B5-1">&#x6982;&#x5FF5;</h4>

<p>&#x51FD;&#x6570;&#x76F4;&#x63A5;&#x6216;&#x95F4;&#x63A5;&#x5730;&#x8C03;&#x7528;&#x81EA;&#x8EAB;</p>
<h4 class="mume-header" id="%E9%80%92%E5%BD%92%E4%B8%8E%E5%88%86%E6%B2%BB">&#x9012;&#x5F52;&#x4E0E;&#x5206;&#x6CBB;</h4>

<ul>
<li>&#x5206;&#x6CBB;&#x6CD5;
<ul>
<li>&#x95EE;&#x9898;&#x7684;&#x5206;&#x89E3;</li>
<li>&#x95EE;&#x9898;&#x89C4;&#x6A21;&#x7684;&#x5206;&#x89E3;</li>
</ul>
</li>
<li>&#x6298;&#x534A;&#x67E5;&#x627E;&#xFF08;&#x9012;&#x5F52;&#xFF09;</li>
<li>&#x5F52;&#x5E76;&#x6392;&#x5E8F;&#xFF08;&#x9012;&#x5F52;&#xFF09;</li>
<li>&#x5FEB;&#x901F;&#x6392;&#x5E8F;&#xFF08;&#x9012;&#x5F52;&#xFF09;</li>
</ul>
<h4 class="mume-header" id="%E9%80%92%E5%BD%92%E4%B8%8E%E8%BF%AD%E4%BB%A3">&#x9012;&#x5F52;&#x4E0E;&#x8FED;&#x4EE3;</h4>

<ul>
<li>&#x8FED;&#x4EE3;&#xFF1A;&#x53CD;&#x590D;&#x5229;&#x7528;&#x53D8;&#x91CF;&#x65E7;&#x503C;&#x63A8;&#x51FA;&#x65B0;&#x503C;</li>
<li>&#x6298;&#x534A;&#x67E5;&#x627E;&#xFF08;&#x8FED;&#x4EE3;&#xFF09;</li>
<li>&#x5F52;&#x5E76;&#x6392;&#x5E8F;&#xFF08;&#x8FED;&#x4EE3;&#xFF09;</li>
</ul>
<h4 class="mume-header" id="%E5%B9%BF%E4%B9%89%E8%A1%A8">&#x5E7F;&#x4E49;&#x8868;</h4>

<h5 class="mume-header" id="%E5%A4%B4%E5%B0%BE%E9%93%BE%E8%A1%A8%E5%AD%98%E5%82%A8%E8%A1%A8%E7%A4%BA">&#x5934;&#x5C3E;&#x94FE;&#x8868;&#x5B58;&#x50A8;&#x8868;&#x793A;</h5>

<p>&#x5E7F;&#x4E49;&#x8868;&#x7684;&#x5934;&#x5C3E;&#x94FE;&#x8868;&#x5B58;&#x50A8;&#x8868;&#x793A;&#x548C;&#x56FE;&#x7247;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token comment">// &#x5E7F;&#x4E49;&#x8868;&#x7684;&#x5934;&#x5C3E;&#x94FE;&#x8868;&#x5B58;&#x50A8;&#x8868;&#x793A;</span>
<span class="token keyword">typedef</span> <span class="token keyword">enum</span> <span class="token punctuation">{</span>ATOM<span class="token punctuation">,</span> LIST<span class="token punctuation">}</span> ElemTag<span class="token punctuation">;</span>
<span class="token comment">// ATOM==0&#xFF1A;&#x539F;&#x5B50;&#xFF0C;LIST==1&#xFF1A;&#x5B50;&#x8868;</span>
<span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token class-name">GLNode</span> <span class="token punctuation">{</span>
    ElemTag tag<span class="token punctuation">;</span>
    <span class="token comment">// &#x516C;&#x5171;&#x90E8;&#x5206;&#xFF0C;&#x7528;&#x4E8E;&#x533A;&#x5206;&#x539F;&#x5B50;&#x7ED3;&#x70B9;&#x548C;&#x8868;&#x7ED3;&#x70B9;</span>
    <span class="token keyword">union</span> <span class="token punctuation">{</span>
        <span class="token comment">// &#x539F;&#x5B50;&#x7ED3;&#x70B9;&#x548C;&#x8868;&#x7ED3;&#x70B9;&#x7684;&#x8054;&#x5408;&#x90E8;&#x5206;</span>
        AtomType atom<span class="token punctuation">;</span>
        <span class="token comment">// atom &#x662F;&#x539F;&#x5B50;&#x7ED3;&#x70B9;&#x7684;&#x503C;&#x57DF;&#xFF0C;AtomType &#x7531;&#x7528;&#x6237;&#x5B9A;&#x4E49;</span>
        <span class="token keyword">struct</span> <span class="token punctuation">{</span>
            <span class="token keyword">struct</span> <span class="token class-name">GLNode</span> <span class="token operator">*</span>hp<span class="token punctuation">,</span> <span class="token operator">*</span>tp<span class="token punctuation">;</span>
        <span class="token punctuation">}</span> ptr<span class="token punctuation">;</span>
        <span class="token comment">// ptr &#x662F;&#x8868;&#x7ED3;&#x70B9;&#x7684;&#x6307;&#x9488;&#x57DF;&#xFF0C;prt.hp &#x548C; ptr.tp &#x5206;&#x522B;&#x6307;&#x5411;&#x8868;&#x5934;&#x548C;&#x8868;&#x5C3E;</span>
    <span class="token punctuation">}</span> a<span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token operator">*</span>GList<span class="token punctuation">,</span> GLNode<span class="token punctuation">;</span>
</pre><p><img src="https://gitee.com/huihut/interview/raw/master/images/GeneralizedList1.png" alt></p>
<h5 class="mume-header" id="%E6%89%A9%E5%B1%95%E7%BA%BF%E6%80%A7%E9%93%BE%E8%A1%A8%E5%AD%98%E5%82%A8%E8%A1%A8%E7%A4%BA">&#x6269;&#x5C55;&#x7EBF;&#x6027;&#x94FE;&#x8868;&#x5B58;&#x50A8;&#x8868;&#x793A;</h5>

<p>&#x6269;&#x5C55;&#x7EBF;&#x6027;&#x94FE;&#x8868;&#x5B58;&#x50A8;&#x8868;&#x793A;&#x548C;&#x56FE;&#x7247;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token comment">// &#x5E7F;&#x4E49;&#x8868;&#x7684;&#x6269;&#x5C55;&#x7EBF;&#x6027;&#x94FE;&#x8868;&#x5B58;&#x50A8;&#x8868;&#x793A;</span>
<span class="token keyword">typedef</span> <span class="token keyword">enum</span> <span class="token punctuation">{</span>ATOM<span class="token punctuation">,</span> LIST<span class="token punctuation">}</span> ElemTag<span class="token punctuation">;</span>
<span class="token comment">// ATOM==0&#xFF1A;&#x539F;&#x5B50;&#xFF0C;LIST==1&#xFF1A;&#x5B50;&#x8868;</span>
<span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token class-name">GLNode1</span> <span class="token punctuation">{</span>
    ElemTag tag<span class="token punctuation">;</span>
    <span class="token comment">// &#x516C;&#x5171;&#x90E8;&#x5206;&#xFF0C;&#x7528;&#x4E8E;&#x533A;&#x5206;&#x539F;&#x5B50;&#x7ED3;&#x70B9;&#x548C;&#x8868;&#x7ED3;&#x70B9;</span>
    <span class="token keyword">union</span> <span class="token punctuation">{</span>
        <span class="token comment">// &#x539F;&#x5B50;&#x7ED3;&#x70B9;&#x548C;&#x8868;&#x7ED3;&#x70B9;&#x7684;&#x8054;&#x5408;&#x90E8;&#x5206;</span>
        AtomType atom<span class="token punctuation">;</span> <span class="token comment">// &#x539F;&#x5B50;&#x7ED3;&#x70B9;&#x7684;&#x503C;&#x57DF;</span>
        <span class="token keyword">struct</span> <span class="token class-name">GLNode1</span> <span class="token operator">*</span>hp<span class="token punctuation">;</span> <span class="token comment">// &#x8868;&#x7ED3;&#x70B9;&#x7684;&#x8868;&#x5934;&#x6307;&#x9488;</span>
    <span class="token punctuation">}</span> a<span class="token punctuation">;</span>
    <span class="token keyword">struct</span> <span class="token class-name">GLNode1</span> <span class="token operator">*</span>tp<span class="token punctuation">;</span>
    <span class="token comment">// &#x76F8;&#x5F53;&#x4E8E;&#x7EBF;&#x6027;&#x94FE;&#x8868;&#x7684; next&#xFF0C;&#x6307;&#x5411;&#x4E0B;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#x7ED3;&#x70B9;</span>
<span class="token punctuation">}</span> <span class="token operator">*</span>GList1<span class="token punctuation">,</span> GLNode1<span class="token punctuation">;</span>
</pre><p><img src="https://gitee.com/huihut/interview/raw/master/images/GeneralizedList2.png" alt></p>
<h3 class="mume-header" id="%E4%BA%8C%E5%8F%89%E6%A0%91">&#x4E8C;&#x53C9;&#x6811;</h3>

<p><a href="DataStructure/BinaryTree.cpp">BinaryTree.cpp</a></p>
<h4 class="mume-header" id="%E6%80%A7%E8%B4%A8">&#x6027;&#x8D28;</h4>

<ol>
<li>&#x975E;&#x7A7A;&#x4E8C;&#x53C9;&#x6811;&#x7B2C; i &#x5C42;&#x6700;&#x591A; 2<sup>(i-1)</sup> &#x4E2A;&#x7ED3;&#x70B9; &#xFF08;i &gt;= 1&#xFF09;</li>
<li>&#x6DF1;&#x5EA6;&#x4E3A; k &#x7684;&#x4E8C;&#x53C9;&#x6811;&#x6700;&#x591A; 2<sup>k</sup> - 1 &#x4E2A;&#x7ED3;&#x70B9; &#xFF08;k &gt;= 1&#xFF09;</li>
<li>&#x5EA6;&#x4E3A; 0 &#x7684;&#x7ED3;&#x70B9;&#x6570;&#x4E3A; n<sub>0</sub>&#xFF0C;&#x5EA6;&#x4E3A; 2 &#x7684;&#x7ED3;&#x70B9;&#x6570;&#x4E3A; n<sub>2</sub>&#xFF0C;&#x5219; n<sub>0</sub> = n<sub>2</sub> + 1</li>
<li>&#x6709; n &#x4E2A;&#x7ED3;&#x70B9;&#x7684;&#x5B8C;&#x5168;&#x4E8C;&#x53C9;&#x6811;&#x6DF1;&#x5EA6; k = &#x230A; log<sub>2</sub>(n) &#x230B; + 1</li>
<li>&#x5BF9;&#x4E8E;&#x542B; n &#x4E2A;&#x7ED3;&#x70B9;&#x7684;&#x5B8C;&#x5168;&#x4E8C;&#x53C9;&#x6811;&#x4E2D;&#x7F16;&#x53F7;&#x4E3A; i &#xFF08;1 &lt;= i &lt;= n&#xFF09; &#x7684;&#x7ED3;&#x70B9;
<ol>
<li>&#x82E5; i = 1&#xFF0C;&#x4E3A;&#x6839;&#xFF0C;&#x5426;&#x5219;&#x53CC;&#x4EB2;&#x4E3A; &#x230A; i / 2 &#x230B;</li>
<li>&#x82E5; 2i &gt; n&#xFF0C;&#x5219; i &#x7ED3;&#x70B9;&#x6CA1;&#x6709;&#x5DE6;&#x5B69;&#x5B50;&#xFF0C;&#x5426;&#x5219;&#x5B69;&#x5B50;&#x7F16;&#x53F7;&#x4E3A; 2i</li>
<li>&#x82E5; 2i + 1 &gt; n&#xFF0C;&#x5219; i &#x7ED3;&#x70B9;&#x6CA1;&#x6709;&#x53F3;&#x5B69;&#x5B50;&#xFF0C;&#x5426;&#x5219;&#x5B69;&#x5B50;&#x7F16;&#x53F7;&#x4E3A; 2i + 1</li>
</ol>
</li>
</ol>
<h4 class="mume-header" id="%E5%AD%98%E5%82%A8%E7%BB%93%E6%9E%84">&#x5B58;&#x50A8;&#x7ED3;&#x6784;</h4>

<p>&#x4E8C;&#x53C9;&#x6811;&#x6570;&#x636E;&#x7ED3;&#x6784;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token class-name">BiTNode</span>
<span class="token punctuation">{</span>
    TElemType data<span class="token punctuation">;</span>
    <span class="token keyword">struct</span> <span class="token class-name">BiTNode</span> <span class="token operator">*</span>lchild<span class="token punctuation">,</span> <span class="token operator">*</span>rchild<span class="token punctuation">;</span>
<span class="token punctuation">}</span>BiTNode<span class="token punctuation">,</span> <span class="token operator">*</span>BiTree<span class="token punctuation">;</span>
</pre><h5 class="mume-header" id="%E9%A1%BA%E5%BA%8F%E5%AD%98%E5%82%A8">&#x987A;&#x5E8F;&#x5B58;&#x50A8;</h5>

<p>&#x4E8C;&#x53C9;&#x6811;&#x987A;&#x5E8F;&#x5B58;&#x50A8;&#x56FE;&#x7247;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/SqBinaryTree.png" alt></p>
<h5 class="mume-header" id="%E9%93%BE%E5%BC%8F%E5%AD%98%E5%82%A8">&#x94FE;&#x5F0F;&#x5B58;&#x50A8;</h5>

<p>&#x4E8C;&#x53C9;&#x6811;&#x94FE;&#x5F0F;&#x5B58;&#x50A8;&#x56FE;&#x7247;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/LinkBinaryTree.png" alt></p>
<h4 class="mume-header" id="%E9%81%8D%E5%8E%86%E6%96%B9%E5%BC%8F">&#x904D;&#x5386;&#x65B9;&#x5F0F;</h4>

<ul>
<li>&#x5148;&#x5E8F;&#x904D;&#x5386;</li>
<li>&#x4E2D;&#x5E8F;&#x904D;&#x5386;</li>
<li>&#x540E;&#x7EED;&#x904D;&#x5386;</li>
<li>&#x5C42;&#x6B21;&#x904D;&#x5386;</li>
</ul>
<h4 class="mume-header" id="%E5%88%86%E7%B1%BB-1">&#x5206;&#x7C7B;</h4>

<ul>
<li>&#x6EE1;&#x4E8C;&#x53C9;&#x6811;</li>
<li>&#x5B8C;&#x5168;&#x4E8C;&#x53C9;&#x6811;&#xFF08;&#x5806;&#xFF09;
<ul>
<li>&#x5927;&#x9876;&#x5806;&#xFF1A;&#x6839; &gt;= &#x5DE6; &amp;&amp; &#x6839; &gt;= &#x53F3;</li>
<li>&#x5C0F;&#x9876;&#x5806;&#xFF1A;&#x6839; &lt;= &#x5DE6; &amp;&amp; &#x6839; &lt;= &#x53F3;</li>
</ul>
</li>
<li>&#x4E8C;&#x53C9;&#x67E5;&#x627E;&#x6811;&#xFF08;&#x4E8C;&#x53C9;&#x6392;&#x5E8F;&#x6811;&#xFF09;&#xFF1A;&#x5DE6; &lt; &#x6839; &lt; &#x53F3;</li>
<li>&#x5E73;&#x8861;&#x4E8C;&#x53C9;&#x6811;&#xFF08;AVL&#x6811;&#xFF09;&#xFF1A;| &#x5DE6;&#x5B50;&#x6811;&#x6811;&#x9AD8; - &#x53F3;&#x5B50;&#x6811;&#x6811;&#x9AD8; | &lt;= 1</li>
<li>&#x6700;&#x5C0F;&#x5931;&#x8861;&#x6811;&#xFF1A;&#x5E73;&#x8861;&#x4E8C;&#x53C9;&#x6811;&#x63D2;&#x5165;&#x65B0;&#x7ED3;&#x70B9;&#x5BFC;&#x81F4;&#x5931;&#x8861;&#x7684;&#x5B50;&#x6811;&#xFF1A;&#x8C03;&#x6574;&#xFF1A;
<ul>
<li>LL&#x578B;&#xFF1A;&#x6839;&#x7684;&#x5DE6;&#x5B69;&#x5B50;&#x53F3;&#x65CB;</li>
<li>RR&#x578B;&#xFF1A;&#x6839;&#x7684;&#x53F3;&#x5B69;&#x5B50;&#x5DE6;&#x65CB;</li>
<li>LR&#x578B;&#xFF1A;&#x6839;&#x7684;&#x5DE6;&#x5B69;&#x5B50;&#x5DE6;&#x65CB;&#xFF0C;&#x518D;&#x53F3;&#x65CB;</li>
<li>RL&#x578B;&#xFF1A;&#x53F3;&#x5B69;&#x5B50;&#x7684;&#x5DE6;&#x5B50;&#x6811;&#xFF0C;&#x5148;&#x53F3;&#x65CB;&#xFF0C;&#x518D;&#x5DE6;&#x65CB;</li>
</ul>
</li>
</ul>
<h3 class="mume-header" id="%E5%85%B6%E4%BB%96%E6%A0%91%E5%8F%8A%E6%A3%AE%E6%9E%97">&#x5176;&#x4ED6;&#x6811;&#x53CA;&#x68EE;&#x6797;</h3>

<h4 class="mume-header" id="%E6%A0%91%E7%9A%84%E5%AD%98%E5%82%A8%E7%BB%93%E6%9E%84">&#x6811;&#x7684;&#x5B58;&#x50A8;&#x7ED3;&#x6784;</h4>

<ul>
<li>&#x53CC;&#x4EB2;&#x8868;&#x793A;&#x6CD5;</li>
<li>&#x53CC;&#x4EB2;&#x5B69;&#x5B50;&#x8868;&#x793A;&#x6CD5;</li>
<li>&#x5B69;&#x5B50;&#x5144;&#x5F1F;&#x8868;&#x793A;&#x6CD5;</li>
</ul>
<h4 class="mume-header" id="%E5%B9%B6%E6%9F%A5%E9%9B%86">&#x5E76;&#x67E5;&#x96C6;</h4>

<p>&#x4E00;&#x79CD;&#x4E0D;&#x76F8;&#x4EA4;&#x7684;&#x5B50;&#x96C6;&#x6240;&#x6784;&#x6210;&#x7684;&#x96C6;&#x5408; S = {S1, S2, ..., Sn}</p>
<h4 class="mume-header" id="%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91avl%E6%A0%91">&#x5E73;&#x8861;&#x4E8C;&#x53C9;&#x6811;&#xFF08;AVL&#x6811;&#xFF09;</h4>

<h5 class="mume-header" id="%E6%80%A7%E8%B4%A8-1">&#x6027;&#x8D28;</h5>

<ul>
<li>| &#x5DE6;&#x5B50;&#x6811;&#x6811;&#x9AD8; - &#x53F3;&#x5B50;&#x6811;&#x6811;&#x9AD8; | &lt;= 1</li>
<li>&#x5E73;&#x8861;&#x4E8C;&#x53C9;&#x6811;&#x5FC5;&#x5B9A;&#x662F;&#x4E8C;&#x53C9;&#x641C;&#x7D22;&#x6811;&#xFF0C;&#x53CD;&#x4E4B;&#x5219;&#x4E0D;&#x4E00;&#x5B9A;</li>
<li>&#x6700;&#x5C0F;&#x4E8C;&#x53C9;&#x5E73;&#x8861;&#x6811;&#x7684;&#x8282;&#x70B9;&#x7684;&#x516C;&#x5F0F;&#xFF1A;<code>F(n)=F(n-1)+F(n-2)+1</code> &#xFF08;1 &#x662F;&#x6839;&#x8282;&#x70B9;&#xFF0C;F(n-1) &#x662F;&#x5DE6;&#x5B50;&#x6811;&#x7684;&#x8282;&#x70B9;&#x6570;&#x91CF;&#xFF0C;F(n-2) &#x662F;&#x53F3;&#x5B50;&#x6811;&#x7684;&#x8282;&#x70B9;&#x6570;&#x91CF;&#xFF09;</li>
</ul>
<p>&#x5E73;&#x8861;&#x4E8C;&#x53C9;&#x6811;&#x56FE;&#x7247;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/Self-balancingBinarySearchTree.png" alt></p>
<h5 class="mume-header" id="%E6%9C%80%E5%B0%8F%E5%A4%B1%E8%A1%A1%E6%A0%91">&#x6700;&#x5C0F;&#x5931;&#x8861;&#x6811;</h5>

<p>&#x5E73;&#x8861;&#x4E8C;&#x53C9;&#x6811;&#x63D2;&#x5165;&#x65B0;&#x7ED3;&#x70B9;&#x5BFC;&#x81F4;&#x5931;&#x8861;&#x7684;&#x5B50;&#x6811;</p>
<p>&#x8C03;&#x6574;&#xFF1A;</p>
<ul>
<li>LL &#x578B;&#xFF1A;&#x6839;&#x7684;&#x5DE6;&#x5B69;&#x5B50;&#x53F3;&#x65CB;</li>
<li>RR &#x578B;&#xFF1A;&#x6839;&#x7684;&#x53F3;&#x5B69;&#x5B50;&#x5DE6;&#x65CB;</li>
<li>LR &#x578B;&#xFF1A;&#x6839;&#x7684;&#x5DE6;&#x5B69;&#x5B50;&#x5DE6;&#x65CB;&#xFF0C;&#x518D;&#x53F3;&#x65CB;</li>
<li>RL &#x578B;&#xFF1A;&#x53F3;&#x5B69;&#x5B50;&#x7684;&#x5DE6;&#x5B50;&#x6811;&#xFF0C;&#x5148;&#x53F3;&#x65CB;&#xFF0C;&#x518D;&#x5DE6;&#x65CB;</li>
</ul>
<h4 class="mume-header" id="%E7%BA%A2%E9%BB%91%E6%A0%91">&#x7EA2;&#x9ED1;&#x6811;</h4>

<p><a href="DataStructure/RedBlackTree.cpp">RedBlackTree.cpp</a></p>
<h5 class="mume-header" id="%E7%BA%A2%E9%BB%91%E6%A0%91%E7%9A%84%E7%89%B9%E5%BE%81%E6%98%AF%E4%BB%80%E4%B9%88">&#x7EA2;&#x9ED1;&#x6811;&#x7684;&#x7279;&#x5F81;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;</h5>

<ol>
<li>&#x8282;&#x70B9;&#x662F;&#x7EA2;&#x8272;&#x6216;&#x9ED1;&#x8272;&#x3002;</li>
<li>&#x6839;&#x662F;&#x9ED1;&#x8272;&#x3002;</li>
<li>&#x6240;&#x6709;&#x53F6;&#x5B50;&#x90FD;&#x662F;&#x9ED1;&#x8272;&#xFF08;&#x53F6;&#x5B50;&#x662F; NIL &#x8282;&#x70B9;&#xFF09;&#x3002;</li>
<li>&#x6BCF;&#x4E2A;&#x7EA2;&#x8272;&#x8282;&#x70B9;&#x5FC5;&#x987B;&#x6709;&#x4E24;&#x4E2A;&#x9ED1;&#x8272;&#x7684;&#x5B50;&#x8282;&#x70B9;&#x3002;&#xFF08;&#x4ECE;&#x6BCF;&#x4E2A;&#x53F6;&#x5B50;&#x5230;&#x6839;&#x7684;&#x6240;&#x6709;&#x8DEF;&#x5F84;&#x4E0A;&#x4E0D;&#x80FD;&#x6709;&#x4E24;&#x4E2A;&#x8FDE;&#x7EED;&#x7684;&#x7EA2;&#x8272;&#x8282;&#x70B9;&#x3002;&#xFF09;&#xFF08;&#x65B0;&#x589E;&#x8282;&#x70B9;&#x7684;&#x7236;&#x8282;&#x70B9;&#x5FC5;&#x987B;&#x76F8;&#x540C;&#xFF09;</li>
<li>&#x4ECE;&#x4EFB;&#x4E00;&#x8282;&#x70B9;&#x5230;&#x5176;&#x6BCF;&#x4E2A;&#x53F6;&#x5B50;&#x7684;&#x6240;&#x6709;&#x7B80;&#x5355;&#x8DEF;&#x5F84;&#x90FD;&#x5305;&#x542B;&#x76F8;&#x540C;&#x6570;&#x76EE;&#x7684;&#x9ED1;&#x8272;&#x8282;&#x70B9;&#x3002;&#xFF08;&#x65B0;&#x589E;&#x8282;&#x70B9;&#x5FC5;&#x987B;&#x4E3A;&#x7EA2;&#xFF09;</li>
</ol>
<h5 class="mume-header" id="%E8%B0%83%E6%95%B4">&#x8C03;&#x6574;</h5>

<ol>
<li>&#x53D8;&#x8272;</li>
<li>&#x5DE6;&#x65CB;</li>
<li>&#x53F3;&#x65CB;</li>
</ol>
<h5 class="mume-header" id="%E5%BA%94%E7%94%A8">&#x5E94;&#x7528;</h5>

<ul>
<li>&#x5173;&#x8054;&#x6570;&#x7EC4;&#xFF1A;&#x5982; STL &#x4E2D;&#x7684; map&#x3001;set</li>
</ul>
<h5 class="mume-header" id="%E7%BA%A2%E9%BB%91%E6%A0%91-b-%E6%A0%91-b-%E6%A0%91%E7%9A%84%E5%8C%BA%E5%88%AB">&#x7EA2;&#x9ED1;&#x6811;&#x3001;B &#x6811;&#x3001;B+ &#x6811;&#x7684;&#x533A;&#x522B;&#xFF1F;</h5>

<ul>
<li>&#x7EA2;&#x9ED1;&#x6811;&#x7684;&#x6DF1;&#x5EA6;&#x6BD4;&#x8F83;&#x5927;&#xFF0C;&#x800C; B &#x6811;&#x548C; B+ &#x6811;&#x7684;&#x6DF1;&#x5EA6;&#x5219;&#x76F8;&#x5BF9;&#x8981;&#x5C0F;&#x4E00;&#x4E9B;</li>
<li>B+ &#x6811;&#x5219;&#x5C06;&#x6570;&#x636E;&#x90FD;&#x4FDD;&#x5B58;&#x5728;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#xFF0C;&#x540C;&#x65F6;&#x901A;&#x8FC7;&#x94FE;&#x8868;&#x7684;&#x5F62;&#x5F0F;&#x5C06;&#x4ED6;&#x4EEC;&#x8FDE;&#x63A5;&#x5728;&#x4E00;&#x8D77;&#x3002;</li>
</ul>
<h4 class="mume-header" id="b-%E6%A0%91b-tree-b-%E6%A0%91b-tree">B &#x6811;&#xFF08;B-tree&#xFF09;&#x3001;B+ &#x6811;&#xFF08;B+-tree&#xFF09;</h4>

<p>B &#x6811;&#x3001;B+ &#x6811;&#x56FE;&#x7247;</p>
<p><img src="https://i.stack.imgur.com/l6UyF.png" alt="B &#x6811;&#xFF08;B-tree&#xFF09;&#x3001;B+ &#x6811;&#xFF08;B+-tree&#xFF09;"></p>
<h5 class="mume-header" id="%E7%89%B9%E7%82%B9">&#x7279;&#x70B9;</h5>

<ul>
<li>&#x4E00;&#x822C;&#x5316;&#x7684;&#x4E8C;&#x53C9;&#x67E5;&#x627E;&#x6811;&#xFF08;binary search tree&#xFF09;</li>
<li>&#x201C;&#x77EE;&#x80D6;&#x201D;&#xFF0C;&#x5185;&#x90E8;&#xFF08;&#x975E;&#x53F6;&#x5B50;&#xFF09;&#x8282;&#x70B9;&#x53EF;&#x4EE5;&#x62E5;&#x6709;&#x53EF;&#x53D8;&#x6570;&#x91CF;&#x7684;&#x5B50;&#x8282;&#x70B9;&#xFF08;&#x6570;&#x91CF;&#x8303;&#x56F4;&#x9884;&#x5148;&#x5B9A;&#x4E49;&#x597D;&#xFF09;</li>
</ul>
<h5 class="mume-header" id="%E5%BA%94%E7%94%A8-1">&#x5E94;&#x7528;</h5>

<ul>
<li>&#x5927;&#x90E8;&#x5206;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x3001;&#x6570;&#x636E;&#x5E93;&#x7CFB;&#x7EDF;&#x90FD;&#x91C7;&#x7528;B&#x6811;&#x3001;B+&#x6811;&#x4F5C;&#x4E3A;&#x7D22;&#x5F15;&#x7ED3;&#x6784;</li>
</ul>
<h5 class="mume-header" id="%E5%8C%BA%E5%88%AB-1">&#x533A;&#x522B;</h5>

<ul>
<li>B+&#x6811;&#x4E2D;&#x53EA;&#x6709;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x4F1A;&#x5E26;&#x6709;&#x6307;&#x5411;&#x8BB0;&#x5F55;&#x7684;&#x6307;&#x9488;&#xFF08;ROWID&#xFF09;&#xFF0C;&#x800C;B&#x6811;&#x5219;&#x6240;&#x6709;&#x8282;&#x70B9;&#x90FD;&#x5E26;&#x6709;&#xFF0C;&#x5728;&#x5185;&#x90E8;&#x8282;&#x70B9;&#x51FA;&#x73B0;&#x7684;&#x7D22;&#x5F15;&#x9879;&#x4E0D;&#x4F1A;&#x518D;&#x51FA;&#x73B0;&#x5728;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x4E2D;&#x3002;</li>
<li>B+&#x6811;&#x4E2D;&#x6240;&#x6709;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x90FD;&#x662F;&#x901A;&#x8FC7;&#x6307;&#x9488;&#x8FDE;&#x63A5;&#x5728;&#x4E00;&#x8D77;&#xFF0C;&#x800C;B&#x6811;&#x4E0D;&#x4F1A;&#x3002;</li>
</ul>
<h5 class="mume-header" id="b%E6%A0%91%E7%9A%84%E4%BC%98%E7%82%B9">B&#x6811;&#x7684;&#x4F18;&#x70B9;</h5>

<p>&#x5BF9;&#x4E8E;&#x5728;&#x5185;&#x90E8;&#x8282;&#x70B9;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x53EF;&#x76F4;&#x63A5;&#x5F97;&#x5230;&#xFF0C;&#x4E0D;&#x5FC5;&#x6839;&#x636E;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x6765;&#x5B9A;&#x4F4D;&#x3002;</p>
<h5 class="mume-header" id="b%E6%A0%91%E7%9A%84%E4%BC%98%E7%82%B9-1">B+&#x6811;&#x7684;&#x4F18;&#x70B9;</h5>

<ul>
<li>&#x975E;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x4E0D;&#x4F1A;&#x5E26;&#x4E0A; ROWID&#xFF0C;&#x8FD9;&#x6837;&#xFF0C;&#x4E00;&#x4E2A;&#x5757;&#x4E2D;&#x53EF;&#x4EE5;&#x5BB9;&#x7EB3;&#x66F4;&#x591A;&#x7684;&#x7D22;&#x5F15;&#x9879;&#xFF0C;&#x4E00;&#x662F;&#x53EF;&#x4EE5;&#x964D;&#x4F4E;&#x6811;&#x7684;&#x9AD8;&#x5EA6;&#x3002;&#x4E8C;&#x662F;&#x4E00;&#x4E2A;&#x5185;&#x90E8;&#x8282;&#x70B9;&#x53EF;&#x4EE5;&#x5B9A;&#x4F4D;&#x66F4;&#x591A;&#x7684;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x3002;</li>
<li>&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x4E4B;&#x95F4;&#x901A;&#x8FC7;&#x6307;&#x9488;&#x6765;&#x8FDE;&#x63A5;&#xFF0C;&#x8303;&#x56F4;&#x626B;&#x63CF;&#x5C06;&#x5341;&#x5206;&#x7B80;&#x5355;&#xFF0C;&#x800C;&#x5BF9;&#x4E8E;B&#x6811;&#x6765;&#x8BF4;&#xFF0C;&#x5219;&#x9700;&#x8981;&#x5728;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x548C;&#x5185;&#x90E8;&#x8282;&#x70B9;&#x4E0D;&#x505C;&#x7684;&#x5F80;&#x8FD4;&#x79FB;&#x52A8;&#x3002;</li>
</ul>
<blockquote>
<p>B &#x6811;&#x3001;B+ &#x6811;&#x533A;&#x522B;&#x6765;&#x81EA;&#xFF1A;<a href="https://stackoverflow.com/questions/870218/differences-between-b-trees-and-b-trees">differences-between-b-trees-and-b-trees</a>&#x3001;<a href="https://www.cnblogs.com/ivictor/p/5849061.html">B&#x6811;&#x548C;B+&#x6811;&#x7684;&#x533A;&#x522B;</a></p>
</blockquote>
<h4 class="mume-header" id="%E5%85%AB%E5%8F%89%E6%A0%91">&#x516B;&#x53C9;&#x6811;</h4>

<p>&#x516B;&#x53C9;&#x6811;&#x56FE;&#x7247;</p>
<p><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/35/Octree2.png/400px-Octree2.png" alt></p>
<p>&#x516B;&#x53C9;&#x6811;&#xFF08;octree&#xFF09;&#xFF0C;&#x6216;&#x79F0;&#x516B;&#x5143;&#x6811;&#xFF0C;&#x662F;&#x4E00;&#x79CD;&#x7528;&#x4E8E;&#x63CF;&#x8FF0;&#x4E09;&#x7EF4;&#x7A7A;&#x95F4;&#xFF08;&#x5212;&#x5206;&#x7A7A;&#x95F4;&#xFF09;&#x7684;&#x6811;&#x72B6;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x3002;&#x516B;&#x53C9;&#x6811;&#x7684;&#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#x8868;&#x793A;&#x4E00;&#x4E2A;&#x6B63;&#x65B9;&#x4F53;&#x7684;&#x4F53;&#x79EF;&#x5143;&#x7D20;&#xFF0C;&#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#x6709;&#x516B;&#x4E2A;&#x5B50;&#x8282;&#x70B9;&#xFF0C;&#x8FD9;&#x516B;&#x4E2A;&#x5B50;&#x8282;&#x70B9;&#x6240;&#x8868;&#x793A;&#x7684;&#x4F53;&#x79EF;&#x5143;&#x7D20;&#x52A0;&#x5728;&#x4E00;&#x8D77;&#x5C31;&#x7B49;&#x4E8E;&#x7236;&#x8282;&#x70B9;&#x7684;&#x4F53;&#x79EF;&#x3002;&#x4E00;&#x822C;&#x4E2D;&#x5FC3;&#x70B9;&#x4F5C;&#x4E3A;&#x8282;&#x70B9;&#x7684;&#x5206;&#x53C9;&#x4E2D;&#x5FC3;&#x3002;</p>
<h5 class="mume-header" id="%E7%94%A8%E9%80%94">&#x7528;&#x9014;</h5>

<ul>
<li>&#x4E09;&#x7EF4;&#x8BA1;&#x7B97;&#x673A;&#x56FE;&#x5F62;</li>
<li>&#x6700;&#x90BB;&#x8FD1;&#x641C;&#x7D22;</li>
</ul>
<p><a id="algorithm" href></a></p>
<h2 class="mume-header" id="%EF%B8%8F-%E7%AE%97%E6%B3%95">&#x26A1;&#xFE0F; &#x7B97;&#x6CD5;</h2>

<h3 class="mume-header" id="%E6%8E%92%E5%BA%8F">&#x6392;&#x5E8F;</h3>

<table>
<thead>
<tr>
<th>&#x6392;&#x5E8F;&#x7B97;&#x6CD5;</th>
<th>&#x5E73;&#x5747;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;</th>
<th>&#x6700;&#x5DEE;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;</th>
<th>&#x7A7A;&#x95F4;&#x590D;&#x6742;&#x5EA6;</th>
<th>&#x6570;&#x636E;&#x5BF9;&#x8C61;&#x7A33;&#x5B9A;&#x6027;</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="Algorithm/BubbleSort.h">&#x5192;&#x6CE1;&#x6392;&#x5E8F;</a></td>
<td>O(n<sup>2</sup>)</td>
<td>O(n<sup>2</sup>)</td>
<td>O(1)</td>
<td>&#x7A33;&#x5B9A;</td>
</tr>
<tr>
<td><a href="Algorithm/SelectionSort.h">&#x9009;&#x62E9;&#x6392;&#x5E8F;</a></td>
<td>O(n<sup>2</sup>)</td>
<td>O(n<sup>2</sup>)</td>
<td>O(1)</td>
<td>&#x6570;&#x7EC4;&#x4E0D;&#x7A33;&#x5B9A;&#x3001;&#x94FE;&#x8868;&#x7A33;&#x5B9A;</td>
</tr>
<tr>
<td><a href="Algorithm/InsertSort.h">&#x63D2;&#x5165;&#x6392;&#x5E8F;</a></td>
<td>O(n<sup>2</sup>)</td>
<td>O(n<sup>2</sup>)</td>
<td>O(1)</td>
<td>&#x7A33;&#x5B9A;</td>
</tr>
<tr>
<td><a href="Algorithm/QuickSort.h">&#x5FEB;&#x901F;&#x6392;&#x5E8F;</a></td>
<td>O(n*log<sub>2</sub>n)</td>
<td>O(n<sup>2</sup>)</td>
<td>O(log<sub>2</sub>n)</td>
<td>&#x4E0D;&#x7A33;&#x5B9A;</td>
</tr>
<tr>
<td><a href="Algorithm/HeapSort.cpp">&#x5806;&#x6392;&#x5E8F;</a></td>
<td>O(n*log<sub>2</sub>n)</td>
<td>O(n*log<sub>2</sub>n)</td>
<td>O(1)</td>
<td>&#x4E0D;&#x7A33;&#x5B9A;</td>
</tr>
<tr>
<td><a href="Algorithm/MergeSort.h">&#x5F52;&#x5E76;&#x6392;&#x5E8F;</a></td>
<td>O(n*log<sub>2</sub>n)</td>
<td>O(n*log<sub>2</sub>n)</td>
<td>O(n)</td>
<td>&#x7A33;&#x5B9A;</td>
</tr>
<tr>
<td><a href="Algorithm/ShellSort.h">&#x5E0C;&#x5C14;&#x6392;&#x5E8F;</a></td>
<td>O(n*log<sup>2</sup>n)</td>
<td>O(n<sup>2</sup>)</td>
<td>O(1)</td>
<td>&#x4E0D;&#x7A33;&#x5B9A;</td>
</tr>
<tr>
<td><a href="Algorithm/CountSort.cpp">&#x8BA1;&#x6570;&#x6392;&#x5E8F;</a></td>
<td>O(n+m)</td>
<td>O(n+m)</td>
<td>O(n+m)</td>
<td>&#x7A33;&#x5B9A;</td>
</tr>
<tr>
<td><a href="Algorithm/BucketSort.cpp">&#x6876;&#x6392;&#x5E8F;</a></td>
<td>O(n)</td>
<td>O(n)</td>
<td>O(m)</td>
<td>&#x7A33;&#x5B9A;</td>
</tr>
<tr>
<td><a href="Algorithm/RadixSort.h">&#x57FA;&#x6570;&#x6392;&#x5E8F;</a></td>
<td>O(k*n)</td>
<td colspan="2">O(n<sup>2</sup>)</td>

<td>&#x7A33;&#x5B9A;</td>
</tr>
</tbody>
</table>
<blockquote>
<ul>
<li>&#x5747;&#x6309;&#x4ECE;&#x5C0F;&#x5230;&#x5927;&#x6392;&#x5217;</li>
<li>k&#xFF1A;&#x4EE3;&#x8868;&#x6570;&#x503C;&#x4E2D;&#x7684; &#x201C;&#x6570;&#x4F4D;&#x201D; &#x4E2A;&#x6570;</li>
<li>n&#xFF1A;&#x4EE3;&#x8868;&#x6570;&#x636E;&#x89C4;&#x6A21;</li>
<li>m&#xFF1A;&#x4EE3;&#x8868;&#x6570;&#x636E;&#x7684;&#x6700;&#x5927;&#x503C;&#x51CF;&#x6700;&#x5C0F;&#x503C;</li>
<li>&#x6765;&#x81EA;&#xFF1A;<a href="https://zh.wikipedia.org/wiki/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95">wikipedia . &#x6392;&#x5E8F;&#x7B97;&#x6CD5;</a></li>
</ul>
</blockquote>
<h3 class="mume-header" id="%E6%9F%A5%E6%89%BE">&#x67E5;&#x627E;</h3>

<table>
<thead>
<tr>
<th>&#x67E5;&#x627E;&#x7B97;&#x6CD5;</th>
<th>&#x5E73;&#x5747;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;</th>
<th>&#x7A7A;&#x95F4;&#x590D;&#x6742;&#x5EA6;</th>
<th>&#x67E5;&#x627E;&#x6761;&#x4EF6;</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="Algorithm/SequentialSearch.h">&#x987A;&#x5E8F;&#x67E5;&#x627E;</a></td>
<td>O(n)</td>
<td>O(1)</td>
<td>&#x65E0;&#x5E8F;&#x6216;&#x6709;&#x5E8F;</td>
</tr>
<tr>
<td><a href="Algorithm/BinarySearch.h">&#x4E8C;&#x5206;&#x67E5;&#x627E;&#xFF08;&#x6298;&#x534A;&#x67E5;&#x627E;&#xFF09;</a></td>
<td>O(log<sub>2</sub>n)</td>
<td>O(1)</td>
<td>&#x6709;&#x5E8F;</td>
</tr>
<tr>
<td><a href="Algorithm/InsertionSearch.h">&#x63D2;&#x503C;&#x67E5;&#x627E;</a></td>
<td>O(log<sub>2</sub>(log<sub>2</sub>n))</td>
<td>O(1)</td>
<td>&#x6709;&#x5E8F;</td>
</tr>
<tr>
<td><a href="Algorithm/FibonacciSearch.cpp">&#x6590;&#x6CE2;&#x90A3;&#x5951;&#x67E5;&#x627E;</a></td>
<td>O(log<sub>2</sub>n)</td>
<td>O(1)</td>
<td>&#x6709;&#x5E8F;</td>
</tr>
<tr>
<td><a href="DataStructure/HashTable.cpp">&#x54C8;&#x5E0C;&#x67E5;&#x627E;</a></td>
<td>O(1)</td>
<td>O(n)</td>
<td>&#x65E0;&#x5E8F;&#x6216;&#x6709;&#x5E8F;</td>
</tr>
<tr>
<td><a href="Algorithm/BSTSearch.h">&#x4E8C;&#x53C9;&#x67E5;&#x627E;&#x6811;&#xFF08;&#x4E8C;&#x53C9;&#x641C;&#x7D22;&#x6811;&#x67E5;&#x627E;&#xFF09;</a></td>
<td colspan="3">O(log<sub>2</sub>n)</td>


</tr>
<tr>
<td><a href="DataStructure/RedBlackTree.cpp">&#x7EA2;&#x9ED1;&#x6811;</a></td>
<td colspan="3">O(log<sub>2</sub>n)</td>


</tr>
<tr>
<td>2-3&#x6811;</td>
<td colspan="3">O(log<sub>2</sub>n - log<sub>3</sub>n)</td>


</tr>
<tr>
<td>B&#x6811;/B+&#x6811;</td>
<td colspan="3">O(log<sub>2</sub>n)</td>


</tr>
</tbody>
</table>
<h3 class="mume-header" id="%E5%9B%BE%E6%90%9C%E7%B4%A2%E7%AE%97%E6%B3%95">&#x56FE;&#x641C;&#x7D22;&#x7B97;&#x6CD5;</h3>

<table>
<thead>
<tr>
<th>&#x56FE;&#x641C;&#x7D22;&#x7B97;&#x6CD5;</th>
<th>&#x6570;&#x636E;&#x7ED3;&#x6784;</th>
<th>&#x904D;&#x5386;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;</th>
<th>&#x7A7A;&#x95F4;&#x590D;&#x6742;&#x5EA6;</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://zh.wikipedia.org/wiki/%E5%B9%BF%E5%BA%A6%E4%BC%98%E5%85%88%E6%90%9C%E7%B4%A2">BFS&#x5E7F;&#x5EA6;&#x4F18;&#x5148;&#x641C;&#x7D22;</a></td>
<td>&#x90BB;&#x63A5;&#x77E9;&#x9635;<br>&#x90BB;&#x63A5;&#x94FE;&#x8868;</td>
<td>O(|v|<sup>2</sup>)<br>O(|v|+|E|)</td>
<td>O(|v|<sup>2</sup>)<br>O(|v|+|E|)</td>
</tr>
<tr>
<td><a href="https://zh.wikipedia.org/wiki/%E6%B7%B1%E5%BA%A6%E4%BC%98%E5%85%88%E6%90%9C%E7%B4%A2">DFS&#x6DF1;&#x5EA6;&#x4F18;&#x5148;&#x641C;&#x7D22;</a></td>
<td>&#x90BB;&#x63A5;&#x77E9;&#x9635;<br>&#x90BB;&#x63A5;&#x94FE;&#x8868;</td>
<td>O(|v|<sup>2</sup>)<br>O(|v|+|E|)</td>
<td>O(|v|<sup>2</sup>)<br>O(|v|+|E|)</td>
</tr>
</tbody>
</table>
<h3 class="mume-header" id="%E5%85%B6%E4%BB%96%E7%AE%97%E6%B3%95">&#x5176;&#x4ED6;&#x7B97;&#x6CD5;</h3>

<table>
<thead>
<tr>
<th>&#x7B97;&#x6CD5;</th>
<th>&#x601D;&#x60F3;</th>
<th>&#x5E94;&#x7528;</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://zh.wikipedia.org/wiki/%E5%88%86%E6%B2%BB%E6%B3%95">&#x5206;&#x6CBB;&#x6CD5;</a></td>
<td>&#x628A;&#x4E00;&#x4E2A;&#x590D;&#x6742;&#x7684;&#x95EE;&#x9898;&#x5206;&#x6210;&#x4E24;&#x4E2A;&#x6216;&#x66F4;&#x591A;&#x7684;&#x76F8;&#x540C;&#x6216;&#x76F8;&#x4F3C;&#x7684;&#x5B50;&#x95EE;&#x9898;&#xFF0C;&#x76F4;&#x5230;&#x6700;&#x540E;&#x5B50;&#x95EE;&#x9898;&#x53EF;&#x4EE5;&#x7B80;&#x5355;&#x7684;&#x76F4;&#x63A5;&#x6C42;&#x89E3;&#xFF0C;&#x539F;&#x95EE;&#x9898;&#x7684;&#x89E3;&#x5373;&#x5B50;&#x95EE;&#x9898;&#x7684;&#x89E3;&#x7684;&#x5408;&#x5E76;</td>
<td><a href="https://github.com/huihut/interview/tree/master/Problems/RoundRobinProblem">&#x5FAA;&#x73AF;&#x8D5B;&#x65E5;&#x7A0B;&#x5B89;&#x6392;&#x95EE;&#x9898;</a>&#x3001;&#x6392;&#x5E8F;&#x7B97;&#x6CD5;&#xFF08;&#x5FEB;&#x901F;&#x6392;&#x5E8F;&#x3001;&#x5F52;&#x5E76;&#x6392;&#x5E8F;&#xFF09;</td>
</tr>
<tr>
<td><a href="https://zh.wikipedia.org/wiki/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92">&#x52A8;&#x6001;&#x89C4;&#x5212;</a></td>
<td>&#x901A;&#x8FC7;&#x628A;&#x539F;&#x95EE;&#x9898;&#x5206;&#x89E3;&#x4E3A;&#x76F8;&#x5BF9;&#x7B80;&#x5355;&#x7684;&#x5B50;&#x95EE;&#x9898;&#x7684;&#x65B9;&#x5F0F;&#x6C42;&#x89E3;&#x590D;&#x6742;&#x95EE;&#x9898;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x9002;&#x7528;&#x4E8E;&#x6709;&#x91CD;&#x53E0;&#x5B50;&#x95EE;&#x9898;&#x548C;&#x6700;&#x4F18;&#x5B50;&#x7ED3;&#x6784;&#x6027;&#x8D28;&#x7684;&#x95EE;&#x9898;</td>
<td><a href="https://github.com/huihut/interview/tree/master/Problems/KnapsackProblem">&#x80CC;&#x5305;&#x95EE;&#x9898;</a>&#x3001;&#x6590;&#x6CE2;&#x90A3;&#x5951;&#x6570;&#x5217;</td>
</tr>
<tr>
<td><a href="https://zh.wikipedia.org/wiki/%E8%B4%AA%E5%BF%83%E6%B3%95">&#x8D2A;&#x5FC3;&#x6CD5;</a></td>
<td>&#x4E00;&#x79CD;&#x5728;&#x6BCF;&#x4E00;&#x6B65;&#x9009;&#x62E9;&#x4E2D;&#x90FD;&#x91C7;&#x53D6;&#x5728;&#x5F53;&#x524D;&#x72B6;&#x6001;&#x4E0B;&#x6700;&#x597D;&#x6216;&#x6700;&#x4F18;&#xFF08;&#x5373;&#x6700;&#x6709;&#x5229;&#xFF09;&#x7684;&#x9009;&#x62E9;&#xFF0C;&#x4ECE;&#x800C;&#x5E0C;&#x671B;&#x5BFC;&#x81F4;&#x7ED3;&#x679C;&#x662F;&#x6700;&#x597D;&#x6216;&#x6700;&#x4F18;&#x7684;&#x7B97;&#x6CD5;</td>
<td>&#x65C5;&#x884C;&#x63A8;&#x9500;&#x5458;&#x95EE;&#x9898;&#xFF08;&#x6700;&#x77ED;&#x8DEF;&#x5F84;&#x95EE;&#x9898;&#xFF09;&#x3001;&#x6700;&#x5C0F;&#x751F;&#x6210;&#x6811;&#x3001;&#x54C8;&#x592B;&#x66FC;&#x7F16;&#x7801;</td>
</tr>
</tbody>
</table>
<p><a id="problems" href></a></p>
<h2 class="mume-header" id="problems">&#x2753; Problems</h2>

<h3 class="mume-header" id="single-problem">Single Problem</h3>

<ul>
<li><a href="Problems/ChessboardCoverageProblem">Chessboard Coverage Problem&#xFF08;&#x68CB;&#x76D8;&#x8986;&#x76D6;&#x95EE;&#x9898;&#xFF09;</a></li>
<li><a href="Problems/KnapsackProblem">Knapsack Problem&#xFF08;&#x80CC;&#x5305;&#x95EE;&#x9898;&#xFF09;</a></li>
<li><a href="Problems/NeumannNeighborProblem">Neumann Neighbor Problem&#xFF08;&#x51AF;&#x8BFA;&#x4F9D;&#x66FC;&#x90BB;&#x5C45;&#x95EE;&#x9898;&#xFF09;</a></li>
<li><a href="Problems/RoundRobinProblem">Round Robin Problem&#xFF08;&#x5FAA;&#x73AF;&#x8D5B;&#x65E5;&#x7A0B;&#x5B89;&#x6392;&#x95EE;&#x9898;&#xFF09;</a></li>
<li><a href="Problems/TubingProblem">Tubing Problem&#xFF08;&#x8F93;&#x6CB9;&#x7BA1;&#x9053;&#x95EE;&#x9898;&#xFF09;</a></li>
</ul>
<h3 class="mume-header" id="leetcode-problems">Leetcode Problems</h3>

<ul>
<li><a href="https://github.com/haoel/leetcode">Github . haoel/leetcode</a></li>
<li><a href="https://github.com/pezy/LeetCode">Github . pezy/LeetCode</a></li>
</ul>
<h3 class="mume-header" id="%E5%89%91%E6%8C%87-offer">&#x5251;&#x6307; Offer</h3>

<ul>
<li><a href="https://github.com/zhedahht/CodingInterviewChinese2">Github . zhedahht/CodingInterviewChinese2</a></li>
<li><a href="https://github.com/gatieme/CodingInterviews">Github . gatieme/CodingInterviews</a></li>
</ul>
<h3 class="mume-header" id="cracking-the-coding-interview-%E7%A8%8B%E5%BA%8F%E5%91%98%E9%9D%A2%E8%AF%95%E9%87%91%E5%85%B8">Cracking the Coding Interview &#x7A0B;&#x5E8F;&#x5458;&#x9762;&#x8BD5;&#x91D1;&#x5178;</h3>

<ul>
<li><a href="https://github.com/careercup/ctci">Github . careercup/ctci</a></li>
<li><a href="https://www.nowcoder.com/ta/cracking-the-coding-interview">&#x725B;&#x5BA2;&#x7F51; . &#x7A0B;&#x5E8F;&#x5458;&#x9762;&#x8BD5;&#x91D1;&#x5178;</a></li>
</ul>
<h3 class="mume-header" id="%E7%89%9B%E5%AE%A2%E7%BD%91">&#x725B;&#x5BA2;&#x7F51;</h3>

<ul>
<li><a href="https://www.nowcoder.com/activity/oj">&#x725B;&#x5BA2;&#x7F51; . &#x5728;&#x7EBF;&#x7F16;&#x7A0B;&#x4E13;&#x9898;</a></li>
</ul>
<p><a id="os" href></a></p>
<h2 class="mume-header" id="%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F">&#x1F4BB; &#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;</h2>

<h3 class="mume-header" id="%E8%BF%9B%E7%A8%8B%E4%B8%8E%E7%BA%BF%E7%A8%8B">&#x8FDB;&#x7A0B;&#x4E0E;&#x7EBF;&#x7A0B;</h3>

<p>&#x5BF9;&#x4E8E;&#x6709;&#x7EBF;&#x7A0B;&#x7CFB;&#x7EDF;&#xFF1A;</p>
<ul>
<li>&#x8FDB;&#x7A0B;&#x662F;&#x8D44;&#x6E90;&#x5206;&#x914D;&#x7684;&#x72EC;&#x7ACB;&#x5355;&#x4F4D;</li>
<li>&#x7EBF;&#x7A0B;&#x662F;&#x8D44;&#x6E90;&#x8C03;&#x5EA6;&#x7684;&#x72EC;&#x7ACB;&#x5355;&#x4F4D;</li>
</ul>
<p>&#x5BF9;&#x4E8E;&#x65E0;&#x7EBF;&#x7A0B;&#x7CFB;&#x7EDF;&#xFF1A;</p>
<ul>
<li>&#x8FDB;&#x7A0B;&#x662F;&#x8D44;&#x6E90;&#x8C03;&#x5EA6;&#x3001;&#x5206;&#x914D;&#x7684;&#x72EC;&#x7ACB;&#x5355;&#x4F4D;</li>
</ul>
<h4 class="mume-header" id="%E8%BF%9B%E7%A8%8B%E4%B9%8B%E9%97%B4%E7%9A%84%E9%80%9A%E4%BF%A1%E6%96%B9%E5%BC%8F%E4%BB%A5%E5%8F%8A%E4%BC%98%E7%BC%BA%E7%82%B9">&#x8FDB;&#x7A0B;&#x4E4B;&#x95F4;&#x7684;&#x901A;&#x4FE1;&#x65B9;&#x5F0F;&#x4EE5;&#x53CA;&#x4F18;&#x7F3A;&#x70B9;</h4>

<ul>
<li>&#x7BA1;&#x9053;&#xFF08;PIPE&#xFF09;
<ul>
<li>&#x6709;&#x540D;&#x7BA1;&#x9053;&#xFF1A;&#x4E00;&#x79CD;&#x534A;&#x53CC;&#x5DE5;&#x7684;&#x901A;&#x4FE1;&#x65B9;&#x5F0F;&#xFF0C;&#x5B83;&#x5141;&#x8BB8;&#x65E0;&#x4EB2;&#x7F18;&#x5173;&#x7CFB;&#x8FDB;&#x7A0B;&#x95F4;&#x7684;&#x901A;&#x4FE1;
<ul>
<li>&#x4F18;&#x70B9;&#xFF1A;&#x53EF;&#x4EE5;&#x5B9E;&#x73B0;&#x4EFB;&#x610F;&#x5173;&#x7CFB;&#x7684;&#x8FDB;&#x7A0B;&#x95F4;&#x7684;&#x901A;&#x4FE1;</li>
<li>&#x7F3A;&#x70B9;&#xFF1A;
<ol>
<li>&#x957F;&#x671F;&#x5B58;&#x4E8E;&#x7CFB;&#x7EDF;&#x4E2D;&#xFF0C;&#x4F7F;&#x7528;&#x4E0D;&#x5F53;&#x5BB9;&#x6613;&#x51FA;&#x9519;</li>
<li>&#x7F13;&#x51B2;&#x533A;&#x6709;&#x9650;</li>
</ol>
</li>
</ul>
</li>
<li>&#x65E0;&#x540D;&#x7BA1;&#x9053;&#xFF1A;&#x4E00;&#x79CD;&#x534A;&#x53CC;&#x5DE5;&#x7684;&#x901A;&#x4FE1;&#x65B9;&#x5F0F;&#xFF0C;&#x53EA;&#x80FD;&#x5728;&#x5177;&#x6709;&#x4EB2;&#x7F18;&#x5173;&#x7CFB;&#x7684;&#x8FDB;&#x7A0B;&#x95F4;&#x4F7F;&#x7528;&#xFF08;&#x7236;&#x5B50;&#x8FDB;&#x7A0B;&#xFF09;
<ul>
<li>&#x4F18;&#x70B9;&#xFF1A;&#x7B80;&#x5355;&#x65B9;&#x4FBF;</li>
<li>&#x7F3A;&#x70B9;&#xFF1A;
<ol>
<li>&#x5C40;&#x9650;&#x4E8E;&#x5355;&#x5411;&#x901A;&#x4FE1;</li>
<li>&#x53EA;&#x80FD;&#x521B;&#x5EFA;&#x5728;&#x5B83;&#x7684;&#x8FDB;&#x7A0B;&#x4EE5;&#x53CA;&#x5176;&#x6709;&#x4EB2;&#x7F18;&#x5173;&#x7CFB;&#x7684;&#x8FDB;&#x7A0B;&#x4E4B;&#x95F4;</li>
<li>&#x7F13;&#x51B2;&#x533A;&#x6709;&#x9650;</li>
</ol>
</li>
</ul>
</li>
</ul>
</li>
<li>&#x4FE1;&#x53F7;&#x91CF;&#xFF08;Semaphore&#xFF09;&#xFF1A;&#x4E00;&#x4E2A;&#x8BA1;&#x6570;&#x5668;&#xFF0C;&#x53EF;&#x4EE5;&#x7528;&#x6765;&#x63A7;&#x5236;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x5BF9;&#x5171;&#x4EAB;&#x8D44;&#x6E90;&#x7684;&#x8BBF;&#x95EE;
<ul>
<li>&#x4F18;&#x70B9;&#xFF1A;&#x53EF;&#x4EE5;&#x540C;&#x6B65;&#x8FDB;&#x7A0B;</li>
<li>&#x7F3A;&#x70B9;&#xFF1A;&#x4FE1;&#x53F7;&#x91CF;&#x6709;&#x9650;</li>
</ul>
</li>
<li>&#x4FE1;&#x53F7;&#xFF08;Signal&#xFF09;&#xFF1A;&#x4E00;&#x79CD;&#x6BD4;&#x8F83;&#x590D;&#x6742;&#x7684;&#x901A;&#x4FE1;&#x65B9;&#x5F0F;&#xFF0C;&#x7528;&#x4E8E;&#x901A;&#x77E5;&#x63A5;&#x6536;&#x8FDB;&#x7A0B;&#x67D0;&#x4E2A;&#x4E8B;&#x4EF6;&#x5DF2;&#x7ECF;&#x53D1;&#x751F;</li>
<li>&#x6D88;&#x606F;&#x961F;&#x5217;&#xFF08;Message Queue&#xFF09;&#xFF1A;&#x662F;&#x6D88;&#x606F;&#x7684;&#x94FE;&#x8868;&#xFF0C;&#x5B58;&#x653E;&#x5728;&#x5185;&#x6838;&#x4E2D;&#x5E76;&#x7531;&#x6D88;&#x606F;&#x961F;&#x5217;&#x6807;&#x8BC6;&#x7B26;&#x6807;&#x8BC6;
<ul>
<li>&#x4F18;&#x70B9;&#xFF1A;&#x53EF;&#x4EE5;&#x5B9E;&#x73B0;&#x4EFB;&#x610F;&#x8FDB;&#x7A0B;&#x95F4;&#x7684;&#x901A;&#x4FE1;&#xFF0C;&#x5E76;&#x901A;&#x8FC7;&#x7CFB;&#x7EDF;&#x8C03;&#x7528;&#x51FD;&#x6570;&#x6765;&#x5B9E;&#x73B0;&#x6D88;&#x606F;&#x53D1;&#x9001;&#x548C;&#x63A5;&#x6536;&#x4E4B;&#x95F4;&#x7684;&#x540C;&#x6B65;&#xFF0C;&#x65E0;&#x9700;&#x8003;&#x8651;&#x540C;&#x6B65;&#x95EE;&#x9898;&#xFF0C;&#x65B9;&#x4FBF;</li>
<li>&#x7F3A;&#x70B9;&#xFF1A;&#x4FE1;&#x606F;&#x7684;&#x590D;&#x5236;&#x9700;&#x8981;&#x989D;&#x5916;&#x6D88;&#x8017; CPU &#x7684;&#x65F6;&#x95F4;&#xFF0C;&#x4E0D;&#x9002;&#x5B9C;&#x4E8E;&#x4FE1;&#x606F;&#x91CF;&#x5927;&#x6216;&#x64CD;&#x4F5C;&#x9891;&#x7E41;&#x7684;&#x573A;&#x5408;</li>
</ul>
</li>
<li>&#x5171;&#x4EAB;&#x5185;&#x5B58;&#xFF08;Shared Memory&#xFF09;&#xFF1A;&#x6620;&#x5C04;&#x4E00;&#x6BB5;&#x80FD;&#x88AB;&#x5176;&#x4ED6;&#x8FDB;&#x7A0B;&#x6240;&#x8BBF;&#x95EE;&#x7684;&#x5185;&#x5B58;&#xFF0C;&#x8FD9;&#x6BB5;&#x5171;&#x4EAB;&#x5185;&#x5B58;&#x7531;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x521B;&#x5EFA;&#xFF0C;&#x4F46;&#x591A;&#x4E2A;&#x8FDB;&#x7A0B;&#x90FD;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;
<ul>
<li>&#x4F18;&#x70B9;&#xFF1A;&#x65E0;&#x987B;&#x590D;&#x5236;&#xFF0C;&#x5FEB;&#x6377;&#xFF0C;&#x4FE1;&#x606F;&#x91CF;&#x5927;</li>
<li>&#x7F3A;&#x70B9;&#xFF1A;
<ol>
<li>&#x901A;&#x4FE1;&#x662F;&#x901A;&#x8FC7;&#x5C06;&#x5171;&#x4EAB;&#x7A7A;&#x95F4;&#x7F13;&#x51B2;&#x533A;&#x76F4;&#x63A5;&#x9644;&#x52A0;&#x5230;&#x8FDB;&#x7A0B;&#x7684;&#x865A;&#x62DF;&#x5730;&#x5740;&#x7A7A;&#x95F4;&#x4E2D;&#x6765;&#x5B9E;&#x73B0;&#x7684;&#xFF0C;&#x56E0;&#x6B64;&#x8FDB;&#x7A0B;&#x95F4;&#x7684;&#x8BFB;&#x5199;&#x64CD;&#x4F5C;&#x7684;&#x540C;&#x6B65;&#x95EE;&#x9898;</li>
<li>&#x5229;&#x7528;&#x5185;&#x5B58;&#x7F13;&#x51B2;&#x533A;&#x76F4;&#x63A5;&#x4EA4;&#x6362;&#x4FE1;&#x606F;&#xFF0C;&#x5185;&#x5B58;&#x7684;&#x5B9E;&#x4F53;&#x5B58;&#x5728;&#x4E8E;&#x8BA1;&#x7B97;&#x673A;&#x4E2D;&#xFF0C;&#x53EA;&#x80FD;&#x540C;&#x4E00;&#x4E2A;&#x8BA1;&#x7B97;&#x673A;&#x7CFB;&#x7EDF;&#x4E2D;&#x7684;&#x8BF8;&#x591A;&#x8FDB;&#x7A0B;&#x5171;&#x4EAB;&#xFF0C;&#x4E0D;&#x65B9;&#x4FBF;&#x7F51;&#x7EDC;&#x901A;&#x4FE1;</li>
</ol>
</li>
</ul>
</li>
<li>&#x5957;&#x63A5;&#x5B57;&#xFF08;Socket&#xFF09;&#xFF1A;&#x53EF;&#x7528;&#x4E8E;&#x4E0D;&#x540C;&#x8BA1;&#x7B97;&#x673A;&#x95F4;&#x7684;&#x8FDB;&#x7A0B;&#x901A;&#x4FE1;
<ul>
<li>&#x4F18;&#x70B9;&#xFF1A;
<ol>
<li>&#x4F20;&#x8F93;&#x6570;&#x636E;&#x4E3A;&#x5B57;&#x8282;&#x7EA7;&#xFF0C;&#x4F20;&#x8F93;&#x6570;&#x636E;&#x53EF;&#x81EA;&#x5B9A;&#x4E49;&#xFF0C;&#x6570;&#x636E;&#x91CF;&#x5C0F;&#x6548;&#x7387;&#x9AD8;</li>
<li>&#x4F20;&#x8F93;&#x6570;&#x636E;&#x65F6;&#x95F4;&#x77ED;&#xFF0C;&#x6027;&#x80FD;&#x9AD8;</li>
<li>&#x9002;&#x5408;&#x4E8E;&#x5BA2;&#x6237;&#x7AEF;&#x548C;&#x670D;&#x52A1;&#x5668;&#x7AEF;&#x4E4B;&#x95F4;&#x4FE1;&#x606F;&#x5B9E;&#x65F6;&#x4EA4;&#x4E92;</li>
<li>&#x53EF;&#x4EE5;&#x52A0;&#x5BC6;,&#x6570;&#x636E;&#x5B89;&#x5168;&#x6027;&#x5F3A;</li>
</ol>
</li>
<li>&#x7F3A;&#x70B9;&#xFF1A;&#x9700;&#x5BF9;&#x4F20;&#x8F93;&#x7684;&#x6570;&#x636E;&#x8FDB;&#x884C;&#x89E3;&#x6790;&#xFF0C;&#x8F6C;&#x5316;&#x6210;&#x5E94;&#x7528;&#x7EA7;&#x7684;&#x6570;&#x636E;&#x3002;</li>
</ul>
</li>
</ul>
<h4 class="mume-header" id="%E7%BA%BF%E7%A8%8B%E4%B9%8B%E9%97%B4%E7%9A%84%E9%80%9A%E4%BF%A1%E6%96%B9%E5%BC%8F">&#x7EBF;&#x7A0B;&#x4E4B;&#x95F4;&#x7684;&#x901A;&#x4FE1;&#x65B9;&#x5F0F;</h4>

<ul>
<li>&#x9501;&#x673A;&#x5236;&#xFF1A;&#x5305;&#x62EC;&#x4E92;&#x65A5;&#x9501;/&#x91CF;&#xFF08;mutex&#xFF09;&#x3001;&#x8BFB;&#x5199;&#x9501;&#xFF08;reader-writer lock&#xFF09;&#x3001;&#x81EA;&#x65CB;&#x9501;&#xFF08;spin lock&#xFF09;&#x3001;&#x6761;&#x4EF6;&#x53D8;&#x91CF;&#xFF08;condition&#xFF09;
<ul>
<li>&#x4E92;&#x65A5;&#x9501;/&#x91CF;&#xFF08;mutex&#xFF09;&#xFF1A;&#x63D0;&#x4F9B;&#x4E86;&#x4EE5;&#x6392;&#x4ED6;&#x65B9;&#x5F0F;&#x9632;&#x6B62;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x88AB;&#x5E76;&#x53D1;&#x4FEE;&#x6539;&#x7684;&#x65B9;&#x6CD5;&#x3002;</li>
<li>&#x8BFB;&#x5199;&#x9501;&#xFF08;reader-writer lock&#xFF09;&#xFF1A;&#x5141;&#x8BB8;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x540C;&#x65F6;&#x8BFB;&#x5171;&#x4EAB;&#x6570;&#x636E;&#xFF0C;&#x800C;&#x5BF9;&#x5199;&#x64CD;&#x4F5C;&#x662F;&#x4E92;&#x65A5;&#x7684;&#x3002;</li>
<li>&#x81EA;&#x65CB;&#x9501;&#xFF08;spin lock&#xFF09;&#x4E0E;&#x4E92;&#x65A5;&#x9501;&#x7C7B;&#x4F3C;&#xFF0C;&#x90FD;&#x662F;&#x4E3A;&#x4E86;&#x4FDD;&#x62A4;&#x5171;&#x4EAB;&#x8D44;&#x6E90;&#x3002;&#x4E92;&#x65A5;&#x9501;&#x662F;&#x5F53;&#x8D44;&#x6E90;&#x88AB;&#x5360;&#x7528;&#xFF0C;&#x7533;&#x8BF7;&#x8005;&#x8FDB;&#x5165;&#x7761;&#x7720;&#x72B6;&#x6001;&#xFF1B;&#x800C;&#x81EA;&#x65CB;&#x9501;&#x5219;&#x5FAA;&#x73AF;&#x68C0;&#x6D4B;&#x4FDD;&#x6301;&#x8005;&#x662F;&#x5426;&#x5DF2;&#x7ECF;&#x91CA;&#x653E;&#x9501;&#x3002;</li>
<li>&#x6761;&#x4EF6;&#x53D8;&#x91CF;&#xFF08;condition&#xFF09;&#xFF1A;&#x53EF;&#x4EE5;&#x4EE5;&#x539F;&#x5B50;&#x7684;&#x65B9;&#x5F0F;&#x963B;&#x585E;&#x8FDB;&#x7A0B;&#xFF0C;&#x76F4;&#x5230;&#x67D0;&#x4E2A;&#x7279;&#x5B9A;&#x6761;&#x4EF6;&#x4E3A;&#x771F;&#x4E3A;&#x6B62;&#x3002;&#x5BF9;&#x6761;&#x4EF6;&#x7684;&#x6D4B;&#x8BD5;&#x662F;&#x5728;&#x4E92;&#x65A5;&#x9501;&#x7684;&#x4FDD;&#x62A4;&#x4E0B;&#x8FDB;&#x884C;&#x7684;&#x3002;&#x6761;&#x4EF6;&#x53D8;&#x91CF;&#x59CB;&#x7EC8;&#x4E0E;&#x4E92;&#x65A5;&#x9501;&#x4E00;&#x8D77;&#x4F7F;&#x7528;&#x3002;</li>
</ul>
</li>
<li>&#x4FE1;&#x53F7;&#x91CF;&#x673A;&#x5236;(Semaphore)
<ul>
<li>&#x65E0;&#x540D;&#x7EBF;&#x7A0B;&#x4FE1;&#x53F7;&#x91CF;</li>
<li>&#x547D;&#x540D;&#x7EBF;&#x7A0B;&#x4FE1;&#x53F7;&#x91CF;</li>
</ul>
</li>
<li>&#x4FE1;&#x53F7;&#x673A;&#x5236;(Signal)&#xFF1A;&#x7C7B;&#x4F3C;&#x8FDB;&#x7A0B;&#x95F4;&#x7684;&#x4FE1;&#x53F7;&#x5904;&#x7406;</li>
<li>&#x5C4F;&#x969C;&#xFF08;barrier&#xFF09;&#xFF1A;&#x5C4F;&#x969C;&#x5141;&#x8BB8;&#x6BCF;&#x4E2A;&#x7EBF;&#x7A0B;&#x7B49;&#x5F85;&#xFF0C;&#x76F4;&#x5230;&#x6240;&#x6709;&#x7684;&#x5408;&#x4F5C;&#x7EBF;&#x7A0B;&#x90FD;&#x8FBE;&#x5230;&#x67D0;&#x4E00;&#x70B9;&#xFF0C;&#x7136;&#x540E;&#x4ECE;&#x8BE5;&#x70B9;&#x7EE7;&#x7EED;&#x6267;&#x884C;&#x3002;</li>
</ul>
<p>&#x7EBF;&#x7A0B;&#x95F4;&#x7684;&#x901A;&#x4FE1;&#x76EE;&#x7684;&#x4E3B;&#x8981;&#x662F;&#x7528;&#x4E8E;&#x7EBF;&#x7A0B;&#x540C;&#x6B65;&#xFF0C;&#x6240;&#x4EE5;&#x7EBF;&#x7A0B;&#x6CA1;&#x6709;&#x50CF;&#x8FDB;&#x7A0B;&#x901A;&#x4FE1;&#x4E2D;&#x7684;&#x7528;&#x4E8E;&#x6570;&#x636E;&#x4EA4;&#x6362;&#x7684;&#x901A;&#x4FE1;&#x673A;&#x5236;</p>
<blockquote>
<p>&#x8FDB;&#x7A0B;&#x4E4B;&#x95F4;&#x7684;&#x901A;&#x4FE1;&#x65B9;&#x5F0F;&#x4EE5;&#x53CA;&#x4F18;&#x7F3A;&#x70B9;&#x6765;&#x6E90;&#x4E8E;&#xFF1A;<a href="http://blog.csdn.net/wujiafei_njgcxy/article/details/77098977">&#x8FDB;&#x7A0B;&#x7EBF;&#x7A0B;&#x9762;&#x8BD5;&#x9898;&#x603B;&#x7ED3;</a></p>
</blockquote>
<h4 class="mume-header" id="%E8%BF%9B%E7%A8%8B%E4%B9%8B%E9%97%B4%E7%A7%81%E6%9C%89%E5%92%8C%E5%85%B1%E4%BA%AB%E7%9A%84%E8%B5%84%E6%BA%90">&#x8FDB;&#x7A0B;&#x4E4B;&#x95F4;&#x79C1;&#x6709;&#x548C;&#x5171;&#x4EAB;&#x7684;&#x8D44;&#x6E90;</h4>

<ul>
<li>&#x79C1;&#x6709;&#xFF1A;&#x5730;&#x5740;&#x7A7A;&#x95F4;&#x3001;&#x5806;&#x3001;&#x5168;&#x5C40;&#x53D8;&#x91CF;&#x3001;&#x6808;&#x3001;&#x5BC4;&#x5B58;&#x5668;</li>
<li>&#x5171;&#x4EAB;&#xFF1A;&#x4EE3;&#x7801;&#x6BB5;&#xFF0C;&#x516C;&#x5171;&#x6570;&#x636E;&#xFF0C;&#x8FDB;&#x7A0B;&#x76EE;&#x5F55;&#xFF0C;&#x8FDB;&#x7A0B; ID</li>
</ul>
<h4 class="mume-header" id="%E7%BA%BF%E7%A8%8B%E4%B9%8B%E9%97%B4%E7%A7%81%E6%9C%89%E5%92%8C%E5%85%B1%E4%BA%AB%E7%9A%84%E8%B5%84%E6%BA%90">&#x7EBF;&#x7A0B;&#x4E4B;&#x95F4;&#x79C1;&#x6709;&#x548C;&#x5171;&#x4EAB;&#x7684;&#x8D44;&#x6E90;</h4>

<ul>
<li>&#x79C1;&#x6709;&#xFF1A;&#x7EBF;&#x7A0B;&#x6808;&#xFF0C;&#x5BC4;&#x5B58;&#x5668;&#xFF0C;&#x7A0B;&#x5E8F;&#x8BA1;&#x6570;&#x5668;</li>
<li>&#x5171;&#x4EAB;&#xFF1A;&#x5806;&#xFF0C;&#x5730;&#x5740;&#x7A7A;&#x95F4;&#xFF0C;&#x5168;&#x5C40;&#x53D8;&#x91CF;&#xFF0C;&#x9759;&#x6001;&#x53D8;&#x91CF;</li>
</ul>
<h4 class="mume-header" id="%E5%A4%9A%E8%BF%9B%E7%A8%8B%E4%B8%8E%E5%A4%9A%E7%BA%BF%E7%A8%8B%E9%97%B4%E7%9A%84%E5%AF%B9%E6%AF%94-%E4%BC%98%E5%8A%A3%E4%B8%8E%E9%80%89%E6%8B%A9">&#x591A;&#x8FDB;&#x7A0B;&#x4E0E;&#x591A;&#x7EBF;&#x7A0B;&#x95F4;&#x7684;&#x5BF9;&#x6BD4;&#x3001;&#x4F18;&#x52A3;&#x4E0E;&#x9009;&#x62E9;</h4>

<h5 class="mume-header" id="%E5%AF%B9%E6%AF%94">&#x5BF9;&#x6BD4;</h5>

<table>
<thead>
<tr>
<th>&#x5BF9;&#x6BD4;&#x7EF4;&#x5EA6;</th>
<th>&#x591A;&#x8FDB;&#x7A0B;</th>
<th>&#x591A;&#x7EBF;&#x7A0B;</th>
<th>&#x603B;&#x7ED3;</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x6570;&#x636E;&#x5171;&#x4EAB;&#x3001;&#x540C;&#x6B65;</td>
<td>&#x6570;&#x636E;&#x5171;&#x4EAB;&#x590D;&#x6742;&#xFF0C;&#x9700;&#x8981;&#x7528; IPC&#xFF1B;&#x6570;&#x636E;&#x662F;&#x5206;&#x5F00;&#x7684;&#xFF0C;&#x540C;&#x6B65;&#x7B80;&#x5355;</td>
<td>&#x56E0;&#x4E3A;&#x5171;&#x4EAB;&#x8FDB;&#x7A0B;&#x6570;&#x636E;&#xFF0C;&#x6570;&#x636E;&#x5171;&#x4EAB;&#x7B80;&#x5355;&#xFF0C;&#x4F46;&#x4E5F;&#x662F;&#x56E0;&#x4E3A;&#x8FD9;&#x4E2A;&#x539F;&#x56E0;&#x5BFC;&#x81F4;&#x540C;&#x6B65;&#x590D;&#x6742;</td>
<td>&#x5404;&#x6709;&#x4F18;&#x52BF;</td>
</tr>
<tr>
<td>&#x5185;&#x5B58;&#x3001;CPU</td>
<td>&#x5360;&#x7528;&#x5185;&#x5B58;&#x591A;&#xFF0C;&#x5207;&#x6362;&#x590D;&#x6742;&#xFF0C;CPU &#x5229;&#x7528;&#x7387;&#x4F4E;</td>
<td>&#x5360;&#x7528;&#x5185;&#x5B58;&#x5C11;&#xFF0C;&#x5207;&#x6362;&#x7B80;&#x5355;&#xFF0C;CPU &#x5229;&#x7528;&#x7387;&#x9AD8;</td>
<td>&#x7EBF;&#x7A0B;&#x5360;&#x4F18;</td>
</tr>
<tr>
<td>&#x521B;&#x5EFA;&#x9500;&#x6BC1;&#x3001;&#x5207;&#x6362;</td>
<td>&#x521B;&#x5EFA;&#x9500;&#x6BC1;&#x3001;&#x5207;&#x6362;&#x590D;&#x6742;&#xFF0C;&#x901F;&#x5EA6;&#x6162;</td>
<td>&#x521B;&#x5EFA;&#x9500;&#x6BC1;&#x3001;&#x5207;&#x6362;&#x7B80;&#x5355;&#xFF0C;&#x901F;&#x5EA6;&#x5F88;&#x5FEB;</td>
<td>&#x7EBF;&#x7A0B;&#x5360;&#x4F18;</td>
</tr>
<tr>
<td>&#x7F16;&#x7A0B;&#x3001;&#x8C03;&#x8BD5;</td>
<td>&#x7F16;&#x7A0B;&#x7B80;&#x5355;&#xFF0C;&#x8C03;&#x8BD5;&#x7B80;&#x5355;</td>
<td>&#x7F16;&#x7A0B;&#x590D;&#x6742;&#xFF0C;&#x8C03;&#x8BD5;&#x590D;&#x6742;</td>
<td>&#x8FDB;&#x7A0B;&#x5360;&#x4F18;</td>
</tr>
<tr>
<td>&#x53EF;&#x9760;&#x6027;</td>
<td>&#x8FDB;&#x7A0B;&#x95F4;&#x4E0D;&#x4F1A;&#x4E92;&#x76F8;&#x5F71;&#x54CD;</td>
<td>&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x6302;&#x6389;&#x5C06;&#x5BFC;&#x81F4;&#x6574;&#x4E2A;&#x8FDB;&#x7A0B;&#x6302;&#x6389;</td>
<td>&#x8FDB;&#x7A0B;&#x5360;&#x4F18;</td>
</tr>
<tr>
<td>&#x5206;&#x5E03;&#x5F0F;</td>
<td>&#x9002;&#x5E94;&#x4E8E;&#x591A;&#x6838;&#x3001;&#x591A;&#x673A;&#x5206;&#x5E03;&#x5F0F;&#xFF1B;&#x5982;&#x679C;&#x4E00;&#x53F0;&#x673A;&#x5668;&#x4E0D;&#x591F;&#xFF0C;&#x6269;&#x5C55;&#x5230;&#x591A;&#x53F0;&#x673A;&#x5668;&#x6BD4;&#x8F83;&#x7B80;&#x5355;</td>
<td>&#x9002;&#x5E94;&#x4E8E;&#x591A;&#x6838;&#x5206;&#x5E03;&#x5F0F;</td>
<td>&#x8FDB;&#x7A0B;&#x5360;&#x4F18;</td>
</tr>
</tbody>
</table>
<h5 class="mume-header" id="%E4%BC%98%E5%8A%A3">&#x4F18;&#x52A3;</h5>

<table>
<thead>
<tr>
<th>&#x4F18;&#x52A3;</th>
<th>&#x591A;&#x8FDB;&#x7A0B;</th>
<th>&#x591A;&#x7EBF;&#x7A0B;</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x4F18;&#x70B9;</td>
<td>&#x7F16;&#x7A0B;&#x3001;&#x8C03;&#x8BD5;&#x7B80;&#x5355;&#xFF0C;&#x53EF;&#x9760;&#x6027;&#x8F83;&#x9AD8;</td>
<td>&#x521B;&#x5EFA;&#x3001;&#x9500;&#x6BC1;&#x3001;&#x5207;&#x6362;&#x901F;&#x5EA6;&#x5FEB;&#xFF0C;&#x5185;&#x5B58;&#x3001;&#x8D44;&#x6E90;&#x5360;&#x7528;&#x5C0F;</td>
</tr>
<tr>
<td>&#x7F3A;&#x70B9;</td>
<td>&#x521B;&#x5EFA;&#x3001;&#x9500;&#x6BC1;&#x3001;&#x5207;&#x6362;&#x901F;&#x5EA6;&#x6162;&#xFF0C;&#x5185;&#x5B58;&#x3001;&#x8D44;&#x6E90;&#x5360;&#x7528;&#x5927;</td>
<td>&#x7F16;&#x7A0B;&#x3001;&#x8C03;&#x8BD5;&#x590D;&#x6742;&#xFF0C;&#x53EF;&#x9760;&#x6027;&#x8F83;&#x5DEE;</td>
</tr>
</tbody>
</table>
<h5 class="mume-header" id="%E9%80%89%E6%8B%A9">&#x9009;&#x62E9;</h5>

<ul>
<li>&#x9700;&#x8981;&#x9891;&#x7E41;&#x521B;&#x5EFA;&#x9500;&#x6BC1;&#x7684;&#x4F18;&#x5148;&#x7528;&#x7EBF;&#x7A0B;</li>
<li>&#x9700;&#x8981;&#x8FDB;&#x884C;&#x5927;&#x91CF;&#x8BA1;&#x7B97;&#x7684;&#x4F18;&#x5148;&#x4F7F;&#x7528;&#x7EBF;&#x7A0B;</li>
<li>&#x5F3A;&#x76F8;&#x5173;&#x7684;&#x5904;&#x7406;&#x7528;&#x7EBF;&#x7A0B;&#xFF0C;&#x5F31;&#x76F8;&#x5173;&#x7684;&#x5904;&#x7406;&#x7528;&#x8FDB;&#x7A0B;</li>
<li>&#x53EF;&#x80FD;&#x8981;&#x6269;&#x5C55;&#x5230;&#x591A;&#x673A;&#x5206;&#x5E03;&#x7684;&#x7528;&#x8FDB;&#x7A0B;&#xFF0C;&#x591A;&#x6838;&#x5206;&#x5E03;&#x7684;&#x7528;&#x7EBF;&#x7A0B;</li>
<li>&#x90FD;&#x6EE1;&#x8DB3;&#x9700;&#x6C42;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x7528;&#x4F60;&#x6700;&#x719F;&#x6089;&#x3001;&#x6700;&#x62FF;&#x624B;&#x7684;&#x65B9;&#x5F0F;</li>
</ul>
<blockquote>
<p>&#x591A;&#x8FDB;&#x7A0B;&#x4E0E;&#x591A;&#x7EBF;&#x7A0B;&#x95F4;&#x7684;&#x5BF9;&#x6BD4;&#x3001;&#x4F18;&#x52A3;&#x4E0E;&#x9009;&#x62E9;&#x6765;&#x81EA;&#xFF1A;<a href="https://blog.csdn.net/lishenglong666/article/details/8557215">&#x591A;&#x7EBF;&#x7A0B;&#x8FD8;&#x662F;&#x591A;&#x8FDB;&#x7A0B;&#x7684;&#x9009;&#x62E9;&#x53CA;&#x533A;&#x522B;</a></p>
</blockquote>
<h3 class="mume-header" id="linux-%E5%86%85%E6%A0%B8%E7%9A%84%E5%90%8C%E6%AD%A5%E6%96%B9%E5%BC%8F">Linux &#x5185;&#x6838;&#x7684;&#x540C;&#x6B65;&#x65B9;&#x5F0F;</h3>

<h4 class="mume-header" id="%E5%8E%9F%E5%9B%A0">&#x539F;&#x56E0;</h4>

<p>&#x5728;&#x73B0;&#x4EE3;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x91CC;&#xFF0C;&#x540C;&#x4E00;&#x65F6;&#x95F4;&#x53EF;&#x80FD;&#x6709;&#x591A;&#x4E2A;&#x5185;&#x6838;&#x6267;&#x884C;&#x6D41;&#x5728;&#x6267;&#x884C;&#xFF0C;&#x56E0;&#x6B64;&#x5185;&#x6838;&#x5176;&#x5B9E;&#x50CF;&#x591A;&#x8FDB;&#x7A0B;&#x591A;&#x7EBF;&#x7A0B;&#x7F16;&#x7A0B;&#x4E00;&#x6837;&#x4E5F;&#x9700;&#x8981;&#x4E00;&#x4E9B;&#x540C;&#x6B65;&#x673A;&#x5236;&#x6765;&#x540C;&#x6B65;&#x5404;&#x6267;&#x884C;&#x5355;&#x5143;&#x5BF9;&#x5171;&#x4EAB;&#x6570;&#x636E;&#x7684;&#x8BBF;&#x95EE;&#x3002;&#x5C24;&#x5176;&#x662F;&#x5728;&#x591A;&#x5904;&#x7406;&#x5668;&#x7CFB;&#x7EDF;&#x4E0A;&#xFF0C;&#x66F4;&#x9700;&#x8981;&#x4E00;&#x4E9B;&#x540C;&#x6B65;&#x673A;&#x5236;&#x6765;&#x540C;&#x6B65;&#x4E0D;&#x540C;&#x5904;&#x7406;&#x5668;&#x4E0A;&#x7684;&#x6267;&#x884C;&#x5355;&#x5143;&#x5BF9;&#x5171;&#x4EAB;&#x7684;&#x6570;&#x636E;&#x7684;&#x8BBF;&#x95EE;&#x3002;</p>
<h4 class="mume-header" id="%E5%90%8C%E6%AD%A5%E6%96%B9%E5%BC%8F">&#x540C;&#x6B65;&#x65B9;&#x5F0F;</h4>

<ul>
<li>&#x539F;&#x5B50;&#x64CD;&#x4F5C;</li>
<li>&#x4FE1;&#x53F7;&#x91CF;&#xFF08;semaphore&#xFF09;</li>
<li>&#x8BFB;&#x5199;&#x4FE1;&#x53F7;&#x91CF;&#xFF08;rw_semaphore&#xFF09;</li>
<li>&#x81EA;&#x65CB;&#x9501;&#xFF08;spinlock&#xFF09;</li>
<li>&#x5927;&#x5185;&#x6838;&#x9501;&#xFF08;BKL&#xFF0C;Big Kernel Lock&#xFF09;</li>
<li>&#x8BFB;&#x5199;&#x9501;&#xFF08;rwlock&#xFF09;</li>
<li>&#x5927;&#x8BFB;&#x8005;&#x9501;&#xFF08;brlock-Big Reader Lock&#xFF09;</li>
<li>&#x8BFB;-&#x62F7;&#x8D1D;&#x4FEE;&#x6539;(RCU&#xFF0C;Read-Copy Update)</li>
<li>&#x987A;&#x5E8F;&#x9501;&#xFF08;seqlock&#xFF09;</li>
</ul>
<blockquote>
<p>&#x6765;&#x81EA;&#xFF1A;<a href="https://www.ibm.com/developerworks/cn/linux/l-synch/part1/">Linux &#x5185;&#x6838;&#x7684;&#x540C;&#x6B65;&#x673A;&#x5236;&#xFF0C;&#x7B2C; 1 &#x90E8;&#x5206;</a>&#x3001;<a href="https://www.ibm.com/developerworks/cn/linux/l-synch/part2/">Linux &#x5185;&#x6838;&#x7684;&#x540C;&#x6B65;&#x673A;&#x5236;&#xFF0C;&#x7B2C; 2 &#x90E8;&#x5206;</a></p>
</blockquote>
<h3 class="mume-header" id="%E6%AD%BB%E9%94%81">&#x6B7B;&#x9501;</h3>

<h4 class="mume-header" id="%E5%8E%9F%E5%9B%A0-1">&#x539F;&#x56E0;</h4>

<ul>
<li>&#x7CFB;&#x7EDF;&#x8D44;&#x6E90;&#x4E0D;&#x8DB3;</li>
<li>&#x8D44;&#x6E90;&#x5206;&#x914D;&#x4E0D;&#x5F53;</li>
<li>&#x8FDB;&#x7A0B;&#x8FD0;&#x884C;&#x63A8;&#x8FDB;&#x987A;&#x5E8F;&#x4E0D;&#x5408;&#x9002;</li>
</ul>
<h4 class="mume-header" id="%E4%BA%A7%E7%94%9F%E6%9D%A1%E4%BB%B6">&#x4EA7;&#x751F;&#x6761;&#x4EF6;</h4>

<ul>
<li>&#x4E92;&#x65A5;</li>
<li>&#x8BF7;&#x6C42;&#x548C;&#x4FDD;&#x6301;</li>
<li>&#x4E0D;&#x5265;&#x593A;</li>
<li>&#x73AF;&#x8DEF;</li>
</ul>
<h4 class="mume-header" id="%E9%A2%84%E9%98%B2">&#x9884;&#x9632;</h4>

<ul>
<li>&#x6253;&#x7834;&#x4E92;&#x65A5;&#x6761;&#x4EF6;&#xFF1A;&#x6539;&#x9020;&#x72EC;&#x5360;&#x6027;&#x8D44;&#x6E90;&#x4E3A;&#x865A;&#x62DF;&#x8D44;&#x6E90;&#xFF0C;&#x5927;&#x90E8;&#x5206;&#x8D44;&#x6E90;&#x5DF2;&#x65E0;&#x6CD5;&#x6539;&#x9020;&#x3002;</li>
<li>&#x6253;&#x7834;&#x4E0D;&#x53EF;&#x62A2;&#x5360;&#x6761;&#x4EF6;&#xFF1A;&#x5F53;&#x4E00;&#x8FDB;&#x7A0B;&#x5360;&#x6709;&#x4E00;&#x72EC;&#x5360;&#x6027;&#x8D44;&#x6E90;&#x540E;&#x53C8;&#x7533;&#x8BF7;&#x4E00;&#x72EC;&#x5360;&#x6027;&#x8D44;&#x6E90;&#x800C;&#x65E0;&#x6CD5;&#x6EE1;&#x8DB3;&#xFF0C;&#x5219;&#x9000;&#x51FA;&#x539F;&#x5360;&#x6709;&#x7684;&#x8D44;&#x6E90;&#x3002;</li>
<li>&#x6253;&#x7834;&#x5360;&#x6709;&#x4E14;&#x7533;&#x8BF7;&#x6761;&#x4EF6;&#xFF1A;&#x91C7;&#x7528;&#x8D44;&#x6E90;&#x9884;&#x5148;&#x5206;&#x914D;&#x7B56;&#x7565;&#xFF0C;&#x5373;&#x8FDB;&#x7A0B;&#x8FD0;&#x884C;&#x524D;&#x7533;&#x8BF7;&#x5168;&#x90E8;&#x8D44;&#x6E90;&#xFF0C;&#x6EE1;&#x8DB3;&#x5219;&#x8FD0;&#x884C;&#xFF0C;&#x4E0D;&#x7136;&#x5C31;&#x7B49;&#x5F85;&#xFF0C;&#x8FD9;&#x6837;&#x5C31;&#x4E0D;&#x4F1A;&#x5360;&#x6709;&#x4E14;&#x7533;&#x8BF7;&#x3002;</li>
<li>&#x6253;&#x7834;&#x5FAA;&#x73AF;&#x7B49;&#x5F85;&#x6761;&#x4EF6;&#xFF1A;&#x5B9E;&#x73B0;&#x8D44;&#x6E90;&#x6709;&#x5E8F;&#x5206;&#x914D;&#x7B56;&#x7565;&#xFF0C;&#x5BF9;&#x6240;&#x6709;&#x8BBE;&#x5907;&#x5B9E;&#x73B0;&#x5206;&#x7C7B;&#x7F16;&#x53F7;&#xFF0C;&#x6240;&#x6709;&#x8FDB;&#x7A0B;&#x53EA;&#x80FD;&#x91C7;&#x7528;&#x6309;&#x5E8F;&#x53F7;&#x9012;&#x589E;&#x7684;&#x5F62;&#x5F0F;&#x7533;&#x8BF7;&#x8D44;&#x6E90;&#x3002;</li>
<li>&#x6709;&#x5E8F;&#x8D44;&#x6E90;&#x5206;&#x914D;&#x6CD5;</li>
<li>&#x94F6;&#x884C;&#x5BB6;&#x7B97;&#x6CD5;</li>
</ul>
<h3 class="mume-header" id="%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F">&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;</h3>

<ul>
<li>Windows&#xFF1A;FCB &#x8868; + FAT + &#x4F4D;&#x56FE;</li>
<li>Unix&#xFF1A;inode + &#x6DF7;&#x5408;&#x7D22;&#x5F15; + &#x6210;&#x7EC4;&#x94FE;&#x63A5;</li>
</ul>
<h3 class="mume-header" id="%E4%B8%BB%E6%9C%BA%E5%AD%97%E8%8A%82%E5%BA%8F%E4%B8%8E%E7%BD%91%E7%BB%9C%E5%AD%97%E8%8A%82%E5%BA%8F">&#x4E3B;&#x673A;&#x5B57;&#x8282;&#x5E8F;&#x4E0E;&#x7F51;&#x7EDC;&#x5B57;&#x8282;&#x5E8F;</h3>

<h4 class="mume-header" id="%E4%B8%BB%E6%9C%BA%E5%AD%97%E8%8A%82%E5%BA%8Fcpu-%E5%AD%97%E8%8A%82%E5%BA%8F">&#x4E3B;&#x673A;&#x5B57;&#x8282;&#x5E8F;&#xFF08;CPU &#x5B57;&#x8282;&#x5E8F;&#xFF09;</h4>

<h5 class="mume-header" id="%E6%A6%82%E5%BF%B5-2">&#x6982;&#x5FF5;</h5>

<p>&#x4E3B;&#x673A;&#x5B57;&#x8282;&#x5E8F;&#x53C8;&#x53EB; CPU &#x5B57;&#x8282;&#x5E8F;&#xFF0C;&#x5176;&#x4E0D;&#x662F;&#x7531;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x51B3;&#x5B9A;&#x7684;&#xFF0C;&#x800C;&#x662F;&#x7531; CPU &#x6307;&#x4EE4;&#x96C6;&#x67B6;&#x6784;&#x51B3;&#x5B9A;&#x7684;&#x3002;&#x4E3B;&#x673A;&#x5B57;&#x8282;&#x5E8F;&#x5206;&#x4E3A;&#x4E24;&#x79CD;&#xFF1A;</p>
<ul>
<li>&#x5927;&#x7AEF;&#x5B57;&#x8282;&#x5E8F;&#xFF08;Big Endian&#xFF09;&#xFF1A;&#x9AD8;&#x5E8F;&#x5B57;&#x8282;&#x5B58;&#x50A8;&#x5728;&#x4F4E;&#x4F4D;&#x5730;&#x5740;&#xFF0C;&#x4F4E;&#x5E8F;&#x5B57;&#x8282;&#x5B58;&#x50A8;&#x5728;&#x9AD8;&#x4F4D;&#x5730;&#x5740;</li>
<li>&#x5C0F;&#x7AEF;&#x5B57;&#x8282;&#x5E8F;&#xFF08;Little Endian&#xFF09;&#xFF1A;&#x9AD8;&#x5E8F;&#x5B57;&#x8282;&#x5B58;&#x50A8;&#x5728;&#x9AD8;&#x4F4D;&#x5730;&#x5740;&#xFF0C;&#x4F4E;&#x5E8F;&#x5B57;&#x8282;&#x5B58;&#x50A8;&#x5728;&#x4F4E;&#x4F4D;&#x5730;&#x5740;</li>
</ul>
<h5 class="mume-header" id="%E5%AD%98%E5%82%A8%E6%96%B9%E5%BC%8F">&#x5B58;&#x50A8;&#x65B9;&#x5F0F;</h5>

<p>32 &#x4F4D;&#x6574;&#x6570; <code>0x12345678</code> &#x662F;&#x4ECE;&#x8D77;&#x59CB;&#x4F4D;&#x7F6E;&#x4E3A; <code>0x00</code> &#x7684;&#x5730;&#x5740;&#x5F00;&#x59CB;&#x5B58;&#x653E;&#xFF0C;&#x5219;&#xFF1A;</p>
<table>
<thead>
<tr>
<th>&#x5185;&#x5B58;&#x5730;&#x5740;</th>
<th>0x00</th>
<th>0x01</th>
<th>0x02</th>
<th>0x03</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x5927;&#x7AEF;</td>
<td>12</td>
<td>34</td>
<td>56</td>
<td>78</td>
</tr>
<tr>
<td>&#x5C0F;&#x7AEF;</td>
<td>78</td>
<td>56</td>
<td>34</td>
<td>12</td>
</tr>
</tbody>
</table>
<p>&#x5927;&#x7AEF;&#x5C0F;&#x7AEF;&#x56FE;&#x7247;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/CPU-Big-Endian.svg.png" alt="&#x5927;&#x7AEF;&#x5E8F;"><br>
<img src="https://gitee.com/huihut/interview/raw/master/images/CPU-Little-Endian.svg.png" alt="&#x5C0F;&#x7AEF;&#x5E8F;"></p>
<h5 class="mume-header" id="%E5%88%A4%E6%96%AD%E5%A4%A7%E7%AB%AF%E5%B0%8F%E7%AB%AF">&#x5224;&#x65AD;&#x5927;&#x7AEF;&#x5C0F;&#x7AEF;</h5>

<p>&#x5224;&#x65AD;&#x5927;&#x7AEF;&#x5C0F;&#x7AEF;</p>
<p>&#x53EF;&#x4EE5;&#x8FD9;&#x6837;&#x5224;&#x65AD;&#x81EA;&#x5DF1; CPU &#x5B57;&#x8282;&#x5E8F;&#x662F;&#x5927;&#x7AEF;&#x8FD8;&#x662F;&#x5C0F;&#x7AEF;&#xFF1A;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;iostream&gt;</span></span>
<span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span>

<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
	<span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0x12345678</span><span class="token punctuation">;</span>

	<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token keyword">char</span><span class="token operator">*</span><span class="token punctuation">)</span><span class="token operator">&amp;</span>i<span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">0x12</span><span class="token punctuation">)</span>
		cout <span class="token operator">&lt;&lt;</span> <span class="token string">&quot;&#x5927;&#x7AEF;&quot;</span> <span class="token operator">&lt;&lt;</span> endl<span class="token punctuation">;</span>
	<span class="token keyword">else</span>	
		cout <span class="token operator">&lt;&lt;</span> <span class="token string">&quot;&#x5C0F;&#x7AEF;&quot;</span> <span class="token operator">&lt;&lt;</span> endl<span class="token punctuation">;</span>

	<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</pre><h5 class="mume-header" id="%E5%90%84%E6%9E%B6%E6%9E%84%E5%A4%84%E7%90%86%E5%99%A8%E7%9A%84%E5%AD%97%E8%8A%82%E5%BA%8F">&#x5404;&#x67B6;&#x6784;&#x5904;&#x7406;&#x5668;&#x7684;&#x5B57;&#x8282;&#x5E8F;</h5>

<ul>
<li>x86&#xFF08;Intel&#x3001;AMD&#xFF09;&#x3001;MOS Technology 6502&#x3001;Z80&#x3001;VAX&#x3001;PDP-11 &#x7B49;&#x5904;&#x7406;&#x5668;&#x4E3A;&#x5C0F;&#x7AEF;&#x5E8F;&#xFF1B;</li>
<li>Motorola 6800&#x3001;Motorola 68000&#x3001;PowerPC 970&#x3001;System/370&#x3001;SPARC&#xFF08;&#x9664; V9 &#x5916;&#xFF09;&#x7B49;&#x5904;&#x7406;&#x5668;&#x4E3A;&#x5927;&#x7AEF;&#x5E8F;&#xFF1B;</li>
<li>ARM&#xFF08;&#x9ED8;&#x8BA4;&#x5C0F;&#x7AEF;&#x5E8F;&#xFF09;&#x3001;PowerPC&#xFF08;&#x9664; PowerPC 970 &#x5916;&#xFF09;&#x3001;DEC Alpha&#x3001;SPARC V9&#x3001;MIPS&#x3001;PA-RISC &#x53CA; IA64 &#x7684;&#x5B57;&#x8282;&#x5E8F;&#x662F;&#x53EF;&#x914D;&#x7F6E;&#x7684;&#x3002;</li>
</ul>
<h4 class="mume-header" id="%E7%BD%91%E7%BB%9C%E5%AD%97%E8%8A%82%E5%BA%8F">&#x7F51;&#x7EDC;&#x5B57;&#x8282;&#x5E8F;</h4>

<p>&#x7F51;&#x7EDC;&#x5B57;&#x8282;&#x987A;&#x5E8F;&#x662F; TCP/IP &#x4E2D;&#x89C4;&#x5B9A;&#x597D;&#x7684;&#x4E00;&#x79CD;&#x6570;&#x636E;&#x8868;&#x793A;&#x683C;&#x5F0F;&#xFF0C;&#x5B83;&#x4E0E;&#x5177;&#x4F53;&#x7684; CPU &#x7C7B;&#x578B;&#x3001;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7B49;&#x65E0;&#x5173;&#xFF0C;&#x4ECE;&#x800C;&#x53EF;&#x4EE5;&#x4FDD;&#x8BC1;&#x6570;&#x636E;&#x5728;&#x4E0D;&#x540C;&#x4E3B;&#x673A;&#x4E4B;&#x95F4;&#x4F20;&#x8F93;&#x65F6;&#x80FD;&#x591F;&#x88AB;&#x6B63;&#x786E;&#x89E3;&#x91CA;&#x3002;</p>
<p>&#x7F51;&#x7EDC;&#x5B57;&#x8282;&#x987A;&#x5E8F;&#x91C7;&#x7528;&#xFF1A;&#x5927;&#x7AEF;&#xFF08;Big Endian&#xFF09;&#x6392;&#x5217;&#x65B9;&#x5F0F;&#x3002;</p>
<h3 class="mume-header" id="%E9%A1%B5%E9%9D%A2%E7%BD%AE%E6%8D%A2%E7%AE%97%E6%B3%95">&#x9875;&#x9762;&#x7F6E;&#x6362;&#x7B97;&#x6CD5;</h3>

<p>&#x5728;&#x5730;&#x5740;&#x6620;&#x5C04;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;&#x82E5;&#x5728;&#x9875;&#x9762;&#x4E2D;&#x53D1;&#x73B0;&#x6240;&#x8981;&#x8BBF;&#x95EE;&#x7684;&#x9875;&#x9762;&#x4E0D;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#xFF0C;&#x5219;&#x4EA7;&#x751F;&#x7F3A;&#x9875;&#x4E2D;&#x65AD;&#x3002;&#x5F53;&#x53D1;&#x751F;&#x7F3A;&#x9875;&#x4E2D;&#x65AD;&#x65F6;&#xFF0C;&#x5982;&#x679C;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x5185;&#x5B58;&#x4E2D;&#x6CA1;&#x6709;&#x7A7A;&#x95F2;&#x9875;&#x9762;&#xFF0C;&#x5219;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x5FC5;&#x987B;&#x5728;&#x5185;&#x5B58;&#x9009;&#x62E9;&#x4E00;&#x4E2A;&#x9875;&#x9762;&#x5C06;&#x5176;&#x79FB;&#x51FA;&#x5185;&#x5B58;&#xFF0C;&#x4EE5;&#x4FBF;&#x4E3A;&#x5373;&#x5C06;&#x8C03;&#x5165;&#x7684;&#x9875;&#x9762;&#x8BA9;&#x51FA;&#x7A7A;&#x95F4;&#x3002;&#x800C;&#x7528;&#x6765;&#x9009;&#x62E9;&#x6DD8;&#x6C70;&#x54EA;&#x4E00;&#x9875;&#x7684;&#x89C4;&#x5219;&#x53EB;&#x505A;&#x9875;&#x9762;&#x7F6E;&#x6362;&#x7B97;&#x6CD5;&#x3002;</p>
<h4 class="mume-header" id="%E5%88%86%E7%B1%BB-2">&#x5206;&#x7C7B;</h4>

<ul>
<li>&#x5168;&#x5C40;&#x7F6E;&#x6362;&#xFF1A;&#x5728;&#x6574;&#x4E2A;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#x7F6E;&#x6362;</li>
<li>&#x5C40;&#x90E8;&#x7F6E;&#x6362;&#xFF1A;&#x5728;&#x672C;&#x8FDB;&#x7A0B;&#x4E2D;&#x8FDB;&#x884C;&#x7F6E;&#x6362;</li>
</ul>
<h4 class="mume-header" id="%E7%AE%97%E6%B3%95">&#x7B97;&#x6CD5;</h4>

<p>&#x5168;&#x5C40;&#xFF1A;</p>
<ul>
<li>&#x5DE5;&#x4F5C;&#x96C6;&#x7B97;&#x6CD5;</li>
<li>&#x7F3A;&#x9875;&#x7387;&#x7F6E;&#x6362;&#x7B97;&#x6CD5;</li>
</ul>
<p>&#x5C40;&#x90E8;&#xFF1A;</p>
<ul>
<li>&#x6700;&#x4F73;&#x7F6E;&#x6362;&#x7B97;&#x6CD5;&#xFF08;OPT&#xFF09;</li>
<li>&#x5148;&#x8FDB;&#x5148;&#x51FA;&#x7F6E;&#x6362;&#x7B97;&#x6CD5;&#xFF08;FIFO&#xFF09;</li>
<li>&#x6700;&#x8FD1;&#x6700;&#x4E45;&#x672A;&#x4F7F;&#x7528;&#xFF08;LRU&#xFF09;&#x7B97;&#x6CD5;</li>
<li>&#x65F6;&#x949F;&#xFF08;Clock&#xFF09;&#x7F6E;&#x6362;&#x7B97;&#x6CD5;</li>
</ul>
<p><a id="computer-network" href></a></p>
<h2 class="mume-header" id="%EF%B8%8F-%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C">&#x2601;&#xFE0F; &#x8BA1;&#x7B97;&#x673A;&#x7F51;&#x7EDC;</h2>

<blockquote>
<p>&#x672C;&#x8282;&#x90E8;&#x5206;&#x77E5;&#x8BC6;&#x70B9;&#x6765;&#x81EA;&#x300A;&#x8BA1;&#x7B97;&#x673A;&#x7F51;&#x7EDC;&#xFF08;&#x7B2C; 7 &#x7248;&#xFF09;&#x300B;</p>
</blockquote>
<p>&#x8BA1;&#x7B97;&#x673A;&#x7F51;&#x7EDC;&#x4F53;&#x7CFB;&#x7ED3;&#x6784;&#xFF1A;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84.png" alt="&#x8BA1;&#x7B97;&#x673A;&#x7F51;&#x7EDC;&#x4F53;&#x7CFB;&#x7ED3;&#x6784;"></p>
<h3 class="mume-header" id="%E5%90%84%E5%B1%82%E4%BD%9C%E7%94%A8%E5%8F%8A%E5%8D%8F%E8%AE%AE">&#x5404;&#x5C42;&#x4F5C;&#x7528;&#x53CA;&#x534F;&#x8BAE;</h3>

<table>
<thead>
<tr>
<th>&#x5206;&#x5C42;</th>
<th>&#x4F5C;&#x7528;</th>
<th>&#x534F;&#x8BAE;</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x7269;&#x7406;&#x5C42;</td>
<td>&#x901A;&#x8FC7;&#x5A92;&#x4ECB;&#x4F20;&#x8F93;&#x6BD4;&#x7279;&#xFF0C;&#x786E;&#x5B9A;&#x673A;&#x68B0;&#x53CA;&#x7535;&#x6C14;&#x89C4;&#x8303;&#xFF08;&#x6BD4;&#x7279; Bit&#xFF09;</td>
<td>RJ45&#x3001;CLOCK&#x3001;IEEE802.3&#xFF08;&#x4E2D;&#x7EE7;&#x5668;&#xFF0C;&#x96C6;&#x7EBF;&#x5668;&#xFF09;</td>
</tr>
<tr>
<td>&#x6570;&#x636E;&#x94FE;&#x8DEF;&#x5C42;</td>
<td>&#x5C06;&#x6BD4;&#x7279;&#x7EC4;&#x88C5;&#x6210;&#x5E27;&#x548C;&#x70B9;&#x5230;&#x70B9;&#x7684;&#x4F20;&#x9012;&#xFF08;&#x5E27; Frame&#xFF09;</td>
<td>PPP&#x3001;FR&#x3001;HDLC&#x3001;VLAN&#x3001;MAC&#xFF08;&#x7F51;&#x6865;&#xFF0C;&#x4EA4;&#x6362;&#x673A;&#xFF09;</td>
</tr>
<tr>
<td>&#x7F51;&#x7EDC;&#x5C42;</td>
<td>&#x8D1F;&#x8D23;&#x6570;&#x636E;&#x5305;&#x4ECE;&#x6E90;&#x5230;&#x5BBF;&#x7684;&#x4F20;&#x9012;&#x548C;&#x7F51;&#x9645;&#x4E92;&#x8FDE;&#xFF08;&#x5305; Packet&#xFF09;</td>
<td>IP&#x3001;ICMP&#x3001;ARP&#x3001;RARP&#x3001;OSPF&#x3001;IPX&#x3001;RIP&#x3001;IGRP&#xFF08;&#x8DEF;&#x7531;&#x5668;&#xFF09;</td>
</tr>
<tr>
<td>&#x8FD0;&#x8F93;&#x5C42;</td>
<td>&#x63D0;&#x4F9B;&#x7AEF;&#x5230;&#x7AEF;&#x7684;&#x53EF;&#x9760;&#x62A5;&#x6587;&#x4F20;&#x9012;&#x548C;&#x9519;&#x8BEF;&#x6062;&#x590D;&#xFF08; &#x6BB5;Segment&#xFF09;</td>
<td>TCP&#x3001;UDP&#x3001;SPX</td>
</tr>
<tr>
<td>&#x4F1A;&#x8BDD;&#x5C42;</td>
<td>&#x5EFA;&#x7ACB;&#x3001;&#x7BA1;&#x7406;&#x548C;&#x7EC8;&#x6B62;&#x4F1A;&#x8BDD;&#xFF08;&#x4F1A;&#x8BDD;&#x534F;&#x8BAE;&#x6570;&#x636E;&#x5355;&#x5143; SPDU&#xFF09;</td>
<td>NFS&#x3001;SQL&#x3001;NETBIOS&#x3001;RPC</td>
</tr>
<tr>
<td>&#x8868;&#x793A;&#x5C42;</td>
<td>&#x5BF9;&#x6570;&#x636E;&#x8FDB;&#x884C;&#x7FFB;&#x8BD1;&#x3001;&#x52A0;&#x5BC6;&#x548C;&#x538B;&#x7F29;&#xFF08;&#x8868;&#x793A;&#x534F;&#x8BAE;&#x6570;&#x636E;&#x5355;&#x5143; PPDU&#xFF09;</td>
<td>JPEG&#x3001;MPEG&#x3001;ASII</td>
</tr>
<tr>
<td>&#x5E94;&#x7528;&#x5C42;</td>
<td>&#x5141;&#x8BB8;&#x8BBF;&#x95EE;OSI&#x73AF;&#x5883;&#x7684;&#x624B;&#x6BB5;&#xFF08;&#x5E94;&#x7528;&#x534F;&#x8BAE;&#x6570;&#x636E;&#x5355;&#x5143; APDU&#xFF09;</td>
<td>FTP&#x3001;DNS&#x3001;Telnet&#x3001;SMTP&#x3001;HTTP&#x3001;WWW&#x3001;NFS</td>
</tr>
</tbody>
</table>
<h3 class="mume-header" id="%E7%89%A9%E7%90%86%E5%B1%82">&#x7269;&#x7406;&#x5C42;</h3>

<ul>
<li>&#x4F20;&#x8F93;&#x6570;&#x636E;&#x7684;&#x5355;&#x4F4D;&#xFF1A;&#x6BD4;&#x7279;</li>
<li>&#x6570;&#x636E;&#x4F20;&#x8F93;&#x7CFB;&#x7EDF;&#xFF1A;&#x6E90;&#x7CFB;&#x7EDF;&#xFF08;&#x6E90;&#x70B9;&#x3001;&#x53D1;&#x9001;&#x5668;&#xFF09; --&gt; &#x4F20;&#x8F93;&#x7CFB;&#x7EDF; --&gt; &#x76EE;&#x7684;&#x7CFB;&#x7EDF;&#xFF08;&#x63A5;&#x6536;&#x5668;&#x3001;&#x7EC8;&#x70B9;&#xFF09;</li>
</ul>
<p>&#x901A;&#x9053;&#xFF1A;</p>
<ul>
<li>&#x5355;&#x5411;&#x901A;&#x9053;&#xFF08;&#x5355;&#x5DE5;&#x901A;&#x9053;&#xFF09;&#xFF1A;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x65B9;&#x5411;&#x901A;&#x4FE1;&#xFF0C;&#x6CA1;&#x6709;&#x53CD;&#x65B9;&#x5411;&#x4EA4;&#x4E92;&#xFF0C;&#x5982;&#x5E7F;&#x64AD;</li>
<li>&#x53CC;&#x5411;&#x4EA4;&#x66FF;&#x901A;&#x4FE1;&#xFF08;&#x534A;&#x53CC;&#x5DE5;&#x901A;&#x4FE1;&#xFF09;&#xFF1A;&#x901A;&#x4FE1;&#x53CC;&#x65B9;&#x90FD;&#x53EF;&#x53D1;&#x6D88;&#x606F;&#xFF0C;&#x4F46;&#x4E0D;&#x80FD;&#x540C;&#x65F6;&#x53D1;&#x9001;&#x6216;&#x63A5;&#x6536;</li>
<li>&#x53CC;&#x5411;&#x540C;&#x65F6;&#x901A;&#x4FE1;&#xFF08;&#x5168;&#x53CC;&#x5DE5;&#x901A;&#x4FE1;&#xFF09;&#xFF1A;&#x901A;&#x4FE1;&#x53CC;&#x65B9;&#x53EF;&#x4EE5;&#x540C;&#x65F6;&#x53D1;&#x9001;&#x548C;&#x63A5;&#x6536;&#x4FE1;&#x606F;</li>
</ul>
<p>&#x901A;&#x9053;&#x590D;&#x7528;&#x6280;&#x672F;&#xFF1A;</p>
<ul>
<li>&#x9891;&#x5206;&#x590D;&#x7528;&#xFF08;FDM&#xFF0C;Frequency Division Multiplexing&#xFF09;&#xFF1A;&#x4E0D;&#x540C;&#x7528;&#x6237;&#x5728;&#x4E0D;&#x540C;&#x9891;&#x5E26;&#xFF0C;&#x6240;&#x7528;&#x7528;&#x6237;&#x5728;&#x540C;&#x6837;&#x65F6;&#x95F4;&#x5360;&#x7528;&#x4E0D;&#x540C;&#x5E26;&#x5BBD;&#x8D44;&#x6E90;</li>
<li>&#x65F6;&#x5206;&#x590D;&#x7528;&#xFF08;TDM&#xFF0C;Time Division Multiplexing&#xFF09;&#xFF1A;&#x4E0D;&#x540C;&#x7528;&#x6237;&#x5728;&#x540C;&#x4E00;&#x65F6;&#x95F4;&#x6BB5;&#x7684;&#x4E0D;&#x540C;&#x65F6;&#x95F4;&#x7247;&#xFF0C;&#x6240;&#x6709;&#x7528;&#x6237;&#x5728;&#x4E0D;&#x540C;&#x65F6;&#x95F4;&#x5360;&#x7528;&#x540C;&#x6837;&#x7684;&#x9891;&#x5E26;&#x5BBD;&#x5EA6;</li>
<li>&#x6CE2;&#x5206;&#x590D;&#x7528;&#xFF08;WDM&#xFF0C;Wavelength Division Multiplexing&#xFF09;&#xFF1A;&#x5149;&#x7684;&#x9891;&#x5206;&#x590D;&#x7528;</li>
<li>&#x7801;&#x5206;&#x590D;&#x7528;&#xFF08;CDM&#xFF0C;Code Division Multiplexing&#xFF09;&#xFF1A;&#x4E0D;&#x540C;&#x7528;&#x6237;&#x4F7F;&#x7528;&#x4E0D;&#x540C;&#x7684;&#x7801;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;&#x540C;&#x6837;&#x65F6;&#x95F4;&#x4F7F;&#x7528;&#x540C;&#x6837;&#x9891;&#x5E26;&#x901A;&#x4FE1;</li>
</ul>
<h3 class="mume-header" id="%E6%95%B0%E6%8D%AE%E9%93%BE%E8%B7%AF%E5%B1%82">&#x6570;&#x636E;&#x94FE;&#x8DEF;&#x5C42;</h3>

<p>&#x4E3B;&#x8981;&#x4FE1;&#x9053;&#xFF1A;</p>
<ul>
<li>&#x70B9;&#x5BF9;&#x70B9;&#x4FE1;&#x9053;</li>
<li>&#x5E7F;&#x64AD;&#x4FE1;&#x9053;</li>
</ul>
<h4 class="mume-header" id="%E7%82%B9%E5%AF%B9%E7%82%B9%E4%BF%A1%E9%81%93">&#x70B9;&#x5BF9;&#x70B9;&#x4FE1;&#x9053;</h4>

<ul>
<li>&#x6570;&#x636E;&#x5355;&#x5143;&#xFF1A;&#x5E27;</li>
</ul>
<p>&#x4E09;&#x4E2A;&#x57FA;&#x672C;&#x95EE;&#x9898;&#xFF1A;</p>
<ul>
<li>&#x5C01;&#x88C5;&#x6210;&#x5E27;&#xFF1A;&#x628A;&#x7F51;&#x7EDC;&#x5C42;&#x7684; IP &#x6570;&#x636E;&#x62A5;&#x5C01;&#x88C5;&#x6210;&#x5E27;&#xFF0C;<code>SOH - &#x6570;&#x636E;&#x90E8;&#x5206; - EOT</code></li>
<li>&#x900F;&#x660E;&#x4F20;&#x8F93;&#xFF1A;&#x4E0D;&#x7BA1;&#x6570;&#x636E;&#x90E8;&#x5206;&#x4EC0;&#x4E48;&#x5B57;&#x7B26;&#xFF0C;&#x90FD;&#x80FD;&#x4F20;&#x8F93;&#x51FA;&#x53BB;&#xFF1B;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x5B57;&#x8282;&#x586B;&#x5145;&#x65B9;&#x6CD5;&#x89E3;&#x51B3;&#xFF08;&#x51B2;&#x7A81;&#x5B57;&#x7B26;&#x524D;&#x52A0;&#x8F6C;&#x4E49;&#x5B57;&#x7B26;&#xFF09;</li>
<li>&#x5DEE;&#x9519;&#x68C0;&#x6D4B;&#xFF1A;&#x964D;&#x4F4E;&#x8BEF;&#x7801;&#x7387;&#xFF08;BER&#xFF0C;Bit Error Rate&#xFF09;&#xFF0C;&#x5E7F;&#x6CDB;&#x4F7F;&#x7528;&#x5FAA;&#x73AF;&#x5197;&#x4F59;&#x68C0;&#x6D4B;&#xFF08;CRC&#xFF0C;Cyclic Redundancy Check&#xFF09;</li>
</ul>
<p>&#x70B9;&#x5BF9;&#x70B9;&#x534F;&#x8BAE;&#xFF08;Point-to-Point Protocol&#xFF09;&#xFF1A;</p>
<ul>
<li>&#x70B9;&#x5BF9;&#x70B9;&#x534F;&#x8BAE;&#xFF08;Point-to-Point Protocol&#xFF09;&#xFF1A;&#x7528;&#x6237;&#x8BA1;&#x7B97;&#x673A;&#x548C; ISP &#x901A;&#x4FE1;&#x65F6;&#x6240;&#x4F7F;&#x7528;&#x7684;&#x534F;&#x8BAE;</li>
</ul>
<h4 class="mume-header" id="%E5%B9%BF%E6%92%AD%E4%BF%A1%E9%81%93">&#x5E7F;&#x64AD;&#x4FE1;&#x9053;</h4>

<p>&#x5E7F;&#x64AD;&#x901A;&#x4FE1;&#xFF1A;</p>
<ul>
<li>&#x786C;&#x4EF6;&#x5730;&#x5740;&#xFF08;&#x7269;&#x7406;&#x5730;&#x5740;&#x3001;MAC &#x5730;&#x5740;&#xFF09;</li>
<li>&#x5355;&#x64AD;&#xFF08;unicast&#xFF09;&#x5E27;&#xFF08;&#x4E00;&#x5BF9;&#x4E00;&#xFF09;&#xFF1A;&#x6536;&#x5230;&#x7684;&#x5E27;&#x7684; MAC &#x5730;&#x5740;&#x4E0E;&#x672C;&#x7AD9;&#x7684;&#x786C;&#x4EF6;&#x5730;&#x5740;&#x76F8;&#x540C;</li>
<li>&#x5E7F;&#x64AD;&#xFF08;broadcast&#xFF09;&#x5E27;&#xFF08;&#x4E00;&#x5BF9;&#x5168;&#x4F53;&#xFF09;&#xFF1A;&#x53D1;&#x9001;&#x7ED9;&#x672C;&#x5C40;&#x57DF;&#x7F51;&#x4E0A;&#x6240;&#x6709;&#x7AD9;&#x70B9;&#x7684;&#x5E27;</li>
<li>&#x591A;&#x64AD;&#xFF08;multicast&#xFF09;&#x5E27;&#xFF08;&#x4E00;&#x5BF9;&#x591A;&#xFF09;&#xFF1A;&#x53D1;&#x9001;&#x7ED9;&#x672C;&#x5C40;&#x57DF;&#x7F51;&#x4E0A;&#x4E00;&#x90E8;&#x5206;&#x7AD9;&#x70B9;&#x7684;&#x5E27;</li>
</ul>
<h3 class="mume-header" id="%E7%BD%91%E7%BB%9C%E5%B1%82">&#x7F51;&#x7EDC;&#x5C42;</h3>

<ul>
<li>IP&#xFF08;Internet Protocol&#xFF0C;&#x7F51;&#x9645;&#x534F;&#x8BAE;&#xFF09;&#x662F;&#x4E3A;&#x8BA1;&#x7B97;&#x673A;&#x7F51;&#x7EDC;&#x76F8;&#x4E92;&#x8FDE;&#x63A5;&#x8FDB;&#x884C;&#x901A;&#x4FE1;&#x800C;&#x8BBE;&#x8BA1;&#x7684;&#x534F;&#x8BAE;&#x3002;</li>
<li>ARP&#xFF08;Address Resolution Protocol&#xFF0C;&#x5730;&#x5740;&#x89E3;&#x6790;&#x534F;&#x8BAE;&#xFF09;</li>
<li>ICMP&#xFF08;Internet Control Message Protocol&#xFF0C;&#x7F51;&#x9645;&#x63A7;&#x5236;&#x62A5;&#x6587;&#x534F;&#x8BAE;&#xFF09;</li>
<li>IGMP&#xFF08;Internet Group Management Protocol&#xFF0C;&#x7F51;&#x9645;&#x7EC4;&#x7BA1;&#x7406;&#x534F;&#x8BAE;&#xFF09;</li>
</ul>
<h4 class="mume-header" id="ip-%E7%BD%91%E9%99%85%E5%8D%8F%E8%AE%AE">IP &#x7F51;&#x9645;&#x534F;&#x8BAE;</h4>

<p>IP &#x5730;&#x5740;&#x5206;&#x7C7B;&#xFF1A;</p>
<ul>
<li><code>IP &#x5730;&#x5740; ::= {&lt;&#x7F51;&#x7EDC;&#x53F7;&gt;,&lt;&#x4E3B;&#x673A;&#x53F7;&gt;}</code></li>
</ul>
<table>
<thead>
<tr>
<th>IP &#x5730;&#x5740;&#x7C7B;&#x522B;</th>
<th>&#x7F51;&#x7EDC;&#x53F7;</th>
<th>&#x7F51;&#x7EDC;&#x8303;&#x56F4;</th>
<th>&#x4E3B;&#x673A;&#x53F7;</th>
<th>IP &#x5730;&#x5740;&#x8303;&#x56F4;</th>
</tr>
</thead>
<tbody>
<tr>
<td>A &#x7C7B;</td>
<td>8bit&#xFF0C;&#x7B2C;&#x4E00;&#x4F4D;&#x56FA;&#x5B9A;&#x4E3A; 0</td>
<td>0 &#x2014;&#x2014; 127</td>
<td>24bit</td>
<td>1.0.0.0 &#x2014;&#x2014; 127.255.255.255</td>
</tr>
<tr>
<td>B &#x7C7B;</td>
<td>16bit&#xFF0C;&#x524D;&#x4E24;&#x4F4D;&#x56FA;&#x5B9A;&#x4E3A;  10</td>
<td>128.0 &#x2014;&#x2014; 191.255</td>
<td>16bit</td>
<td>128.0.0.0 &#x2014;&#x2014; 191.255.255.255</td>
</tr>
<tr>
<td>C  &#x7C7B;</td>
<td>24bit&#xFF0C;&#x524D;&#x4E09;&#x4F4D;&#x56FA;&#x5B9A;&#x4E3A;  110</td>
<td>192.0.0 &#x2014;&#x2014; 223.255.255</td>
<td>8bit</td>
<td>192.0.0.0 &#x2014;&#x2014; 223.255.255.255</td>
</tr>
<tr>
<td>D  &#x7C7B;</td>
<td colspan="4">&#x524D;&#x56DB;&#x4F4D;&#x56FA;&#x5B9A;&#x4E3A; 1110&#xFF0C;&#x540E;&#x9762;&#x4E3A;&#x591A;&#x64AD;&#x5730;&#x5740;</td>



</tr>
<tr>
<td>E  &#x7C7B;</td>
<td colspan="4">&#x524D;&#x4E94;&#x4F4D;&#x56FA;&#x5B9A;&#x4E3A; 11110&#xFF0C;&#x540E;&#x9762;&#x4FDD;&#x7559;&#x4E3A;&#x4ECA;&#x540E;&#x6240;&#x7528;</td>



</tr>
</tbody>
</table>
<p>IP &#x6570;&#x636E;&#x62A5;&#x683C;&#x5F0F;&#xFF1A;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/IP%E6%95%B0%E6%8D%AE%E6%8A%A5%E6%A0%BC%E5%BC%8F.png" alt="IP &#x6570;&#x636E;&#x62A5;&#x683C;&#x5F0F;"></p>
<h4 class="mume-header" id="icmp-%E7%BD%91%E9%99%85%E6%8E%A7%E5%88%B6%E6%8A%A5%E6%96%87%E5%8D%8F%E8%AE%AE">ICMP &#x7F51;&#x9645;&#x63A7;&#x5236;&#x62A5;&#x6587;&#x534F;&#x8BAE;</h4>

<p>ICMP &#x62A5;&#x6587;&#x683C;&#x5F0F;&#xFF1A;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/ICMP%E6%8A%A5%E6%96%87%E6%A0%BC%E5%BC%8F.png" alt="ICMP &#x62A5;&#x6587;&#x683C;&#x5F0F;"></p>
<p>&#x5E94;&#x7528;&#xFF1A;</p>
<ul>
<li>PING&#xFF08;Packet InterNet Groper&#xFF0C;&#x5206;&#x7EC4;&#x7F51;&#x95F4;&#x63A2;&#x6D4B;&#xFF09;&#x6D4B;&#x8BD5;&#x4E24;&#x4E2A;&#x4E3B;&#x673A;&#x4E4B;&#x95F4;&#x7684;&#x8FDE;&#x901A;&#x6027;</li>
<li>TTL&#xFF08;Time To Live&#xFF0C;&#x751F;&#x5B58;&#x65F6;&#x95F4;&#xFF09;&#x8BE5;&#x5B57;&#x6BB5;&#x6307;&#x5B9A; IP &#x5305;&#x88AB;&#x8DEF;&#x7531;&#x5668;&#x4E22;&#x5F03;&#x4E4B;&#x524D;&#x5141;&#x8BB8;&#x901A;&#x8FC7;&#x7684;&#x6700;&#x5927;&#x7F51;&#x6BB5;&#x6570;&#x91CF;</li>
</ul>
<h4 class="mume-header" id="%E5%86%85%E9%83%A8%E7%BD%91%E5%85%B3%E5%8D%8F%E8%AE%AE">&#x5185;&#x90E8;&#x7F51;&#x5173;&#x534F;&#x8BAE;</h4>

<ul>
<li>RIP&#xFF08;Routing Information Protocol&#xFF0C;&#x8DEF;&#x7531;&#x4FE1;&#x606F;&#x534F;&#x8BAE;&#xFF09;</li>
<li>OSPF&#xFF08;Open Sortest Path First&#xFF0C;&#x5F00;&#x653E;&#x6700;&#x77ED;&#x8DEF;&#x5F84;&#x4F18;&#x5148;&#xFF09;</li>
</ul>
<h4 class="mume-header" id="%E5%A4%96%E9%83%A8%E7%BD%91%E5%85%B3%E5%8D%8F%E8%AE%AE">&#x5916;&#x90E8;&#x7F51;&#x5173;&#x534F;&#x8BAE;</h4>

<ul>
<li>BGP&#xFF08;Border Gateway Protocol&#xFF0C;&#x8FB9;&#x754C;&#x7F51;&#x5173;&#x534F;&#x8BAE;&#xFF09;</li>
</ul>
<h4 class="mume-header" id="ip%E5%A4%9A%E6%92%AD">IP&#x591A;&#x64AD;</h4>

<ul>
<li>IGMP&#xFF08;Internet Group Management Protocol&#xFF0C;&#x7F51;&#x9645;&#x7EC4;&#x7BA1;&#x7406;&#x534F;&#x8BAE;&#xFF09;</li>
<li>&#x591A;&#x64AD;&#x8DEF;&#x7531;&#x9009;&#x62E9;&#x534F;&#x8BAE;</li>
</ul>
<h4 class="mume-header" id="vpn-%E5%92%8C-nat">VPN &#x548C; NAT</h4>

<ul>
<li>VPN&#xFF08;Virtual Private Network&#xFF0C;&#x865A;&#x62DF;&#x4E13;&#x7528;&#x7F51;&#xFF09;</li>
<li>NAT&#xFF08;Network Address Translation&#xFF0C;&#x7F51;&#x7EDC;&#x5730;&#x5740;&#x8F6C;&#x6362;&#xFF09;</li>
</ul>
<h4 class="mume-header" id="%E8%B7%AF%E7%94%B1%E8%A1%A8%E5%8C%85%E5%90%AB%E4%BB%80%E4%B9%88">&#x8DEF;&#x7531;&#x8868;&#x5305;&#x542B;&#x4EC0;&#x4E48;&#xFF1F;</h4>

<ol>
<li>&#x7F51;&#x7EDC; ID&#xFF08;Network ID, Network number&#xFF09;&#xFF1A;&#x5C31;&#x662F;&#x76EE;&#x6807;&#x5730;&#x5740;&#x7684;&#x7F51;&#x7EDC; ID&#x3002;</li>
<li>&#x5B50;&#x7F51;&#x63A9;&#x7801;&#xFF08;subnet mask&#xFF09;&#xFF1A;&#x7528;&#x6765;&#x5224;&#x65AD; IP &#x6240;&#x5C5E;&#x7F51;&#x7EDC;</li>
<li>&#x4E0B;&#x4E00;&#x8DF3;&#x5730;&#x5740;/&#x63A5;&#x53E3;&#xFF08;Next hop / interface&#xFF09;&#xFF1A;&#x5C31;&#x662F;&#x6570;&#x636E;&#x5728;&#x53D1;&#x9001;&#x5230;&#x76EE;&#x6807;&#x5730;&#x5740;&#x7684;&#x65C5;&#x9014;&#x4E2D;&#x4E0B;&#x4E00;&#x7AD9;&#x7684;&#x5730;&#x5740;&#x3002;&#x5176;&#x4E2D; interface &#x6307;&#x5411; next hop&#xFF08;&#x5373;&#x4E3A;&#x4E0B;&#x4E00;&#x4E2A; route&#xFF09;&#x3002;&#x4E00;&#x4E2A;&#x81EA;&#x6CBB;&#x7CFB;&#x7EDF;&#xFF08;AS, Autonomous system&#xFF09;&#x4E2D;&#x7684; route &#x5E94;&#x8BE5;&#x5305;&#x542B;&#x533A;&#x57DF;&#x5185;&#x6240;&#x6709;&#x7684;&#x5B50;&#x7F51;&#x7EDC;&#xFF0C;&#x800C;&#x9ED8;&#x8BA4;&#x7F51;&#x5173;&#xFF08;Network id: <code>0.0.0.0</code>, Netmask: <code>0.0.0.0</code>&#xFF09;&#x6307;&#x5411;&#x81EA;&#x6CBB;&#x7CFB;&#x7EDF;&#x7684;&#x51FA;&#x53E3;&#x3002;</li>
</ol>
<p>&#x6839;&#x636E;&#x5E94;&#x7528;&#x548C;&#x6267;&#x884C;&#x7684;&#x4E0D;&#x540C;&#xFF0C;&#x8DEF;&#x7531;&#x8868;&#x53EF;&#x80FD;&#x542B;&#x6709;&#x5982;&#x4E0B;&#x9644;&#x52A0;&#x4FE1;&#x606F;&#xFF1A;</p>
<ol>
<li>&#x82B1;&#x8D39;&#xFF08;Cost&#xFF09;&#xFF1A;&#x5C31;&#x662F;&#x6570;&#x636E;&#x53D1;&#x9001;&#x8FC7;&#x7A0B;&#x4E2D;&#x901A;&#x8FC7;&#x8DEF;&#x5F84;&#x6240;&#x9700;&#x8981;&#x7684;&#x82B1;&#x8D39;&#x3002;</li>
<li>&#x8DEF;&#x7531;&#x7684;&#x670D;&#x52A1;&#x8D28;&#x91CF;</li>
<li>&#x8DEF;&#x7531;&#x4E2D;&#x9700;&#x8981;&#x8FC7;&#x6EE4;&#x7684;&#x51FA;/&#x5165;&#x8FDE;&#x63A5;&#x5217;&#x8868;</li>
</ol>
<h3 class="mume-header" id="%E8%BF%90%E8%BE%93%E5%B1%82">&#x8FD0;&#x8F93;&#x5C42;</h3>

<p>&#x534F;&#x8BAE;&#xFF1A;</p>
<ul>
<li>TCP&#xFF08;Transmission Control Protocol&#xFF0C;&#x4F20;&#x8F93;&#x63A7;&#x5236;&#x534F;&#x8BAE;&#xFF09;</li>
<li>UDP&#xFF08;User Datagram Protocol&#xFF0C;&#x7528;&#x6237;&#x6570;&#x636E;&#x62A5;&#x534F;&#x8BAE;&#xFF09;</li>
</ul>
<p>&#x7AEF;&#x53E3;&#xFF1A;</p>
<table>
<thead>
<tr>
<th>&#x5E94;&#x7528;&#x7A0B;&#x5E8F;</th>
<th>FTP</th>
<th>TELNET</th>
<th>SMTP</th>
<th>DNS</th>
<th>TFTP</th>
<th>HTTP</th>
<th>HTTPS</th>
<th>SNMP</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x7AEF;&#x53E3;&#x53F7;</td>
<td>21</td>
<td>23</td>
<td>25</td>
<td>53</td>
<td>69</td>
<td>80</td>
<td>443</td>
<td>161</td>
</tr>
</tbody>
</table>
<h4 class="mume-header" id="tcp">TCP</h4>

<ul>
<li>TCP&#xFF08;Transmission Control Protocol&#xFF0C;&#x4F20;&#x8F93;&#x63A7;&#x5236;&#x534F;&#x8BAE;&#xFF09;&#x662F;&#x4E00;&#x79CD;&#x9762;&#x5411;&#x8FDE;&#x63A5;&#x7684;&#x3001;&#x53EF;&#x9760;&#x7684;&#x3001;&#x57FA;&#x4E8E;&#x5B57;&#x8282;&#x6D41;&#x7684;&#x4F20;&#x8F93;&#x5C42;&#x901A;&#x4FE1;&#x534F;&#x8BAE;&#xFF0C;&#x5176;&#x4F20;&#x8F93;&#x7684;&#x5355;&#x4F4D;&#x662F;&#x62A5;&#x6587;&#x6BB5;&#x3002;</li>
</ul>
<p>&#x7279;&#x5F81;&#xFF1A;</p>
<ul>
<li>&#x9762;&#x5411;&#x8FDE;&#x63A5;</li>
<li>&#x53EA;&#x80FD;&#x70B9;&#x5BF9;&#x70B9;&#xFF08;&#x4E00;&#x5BF9;&#x4E00;&#xFF09;&#x901A;&#x4FE1;</li>
<li>&#x53EF;&#x9760;&#x4EA4;&#x4E92;</li>
<li>&#x5168;&#x53CC;&#x5DE5;&#x901A;&#x4FE1;</li>
<li>&#x9762;&#x5411;&#x5B57;&#x8282;&#x6D41;</li>
</ul>
<p>TCP &#x5982;&#x4F55;&#x4FDD;&#x8BC1;&#x53EF;&#x9760;&#x4F20;&#x8F93;&#xFF1A;</p>
<ul>
<li>&#x786E;&#x8BA4;&#x548C;&#x8D85;&#x65F6;&#x91CD;&#x4F20;</li>
<li>&#x6570;&#x636E;&#x5408;&#x7406;&#x5206;&#x7247;&#x548C;&#x6392;&#x5E8F;</li>
<li>&#x6D41;&#x91CF;&#x63A7;&#x5236;</li>
<li>&#x62E5;&#x585E;&#x63A7;&#x5236;</li>
<li>&#x6570;&#x636E;&#x6821;&#x9A8C;</li>
</ul>
<p>TCP &#x62A5;&#x6587;&#x7ED3;&#x6784;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/TCP%E6%8A%A5%E6%96%87.png" alt="TCP &#x62A5;&#x6587;"></p>
<p>TCP &#x9996;&#x90E8;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/TCP%E9%A6%96%E9%83%A8.png" alt="TCP &#x9996;&#x90E8;"></p>
<p>TCP&#xFF1A;&#x72B6;&#x6001;&#x63A7;&#x5236;&#x7801;&#xFF08;Code&#xFF0C;Control Flag&#xFF09;&#xFF0C;&#x5360; 6 &#x6BD4;&#x7279;&#xFF0C;&#x542B;&#x4E49;&#x5982;&#x4E0B;&#xFF1A;</p>
<ul>
<li>URG&#xFF1A;&#x7D27;&#x6025;&#x6BD4;&#x7279;&#xFF08;urgent&#xFF09;&#xFF0C;&#x5F53; <code>URG&#xFF1D;1</code> &#x65F6;&#xFF0C;&#x8868;&#x660E;&#x7D27;&#x6025;&#x6307;&#x9488;&#x5B57;&#x6BB5;&#x6709;&#x6548;&#xFF0C;&#x4EE3;&#x8868;&#x8BE5;&#x5C01;&#x5305;&#x4E3A;&#x7D27;&#x6025;&#x5C01;&#x5305;&#x3002;&#x5B83;&#x544A;&#x8BC9;&#x7CFB;&#x7EDF;&#x6B64;&#x62A5;&#x6587;&#x6BB5;&#x4E2D;&#x6709;&#x7D27;&#x6025;&#x6570;&#x636E;&#xFF0C;&#x5E94;&#x5C3D;&#x5FEB;&#x4F20;&#x9001;(&#x76F8;&#x5F53;&#x4E8E;&#x9AD8;&#x4F18;&#x5148;&#x7EA7;&#x7684;&#x6570;&#x636E;)&#xFF0C; &#x4E14;&#x4E0A;&#x56FE;&#x4E2D;&#x7684; Urgent Pointer &#x5B57;&#x6BB5;&#x4E5F;&#x4F1A;&#x88AB;&#x542F;&#x7528;&#x3002;</li>
<li>ACK&#xFF1A;&#x786E;&#x8BA4;&#x6BD4;&#x7279;&#xFF08;Acknowledge&#xFF09;&#x3002;&#x53EA;&#x6709;&#x5F53; <code>ACK&#xFF1D;1</code> &#x65F6;&#x786E;&#x8BA4;&#x53F7;&#x5B57;&#x6BB5;&#x624D;&#x6709;&#x6548;&#xFF0C;&#x4EE3;&#x8868;&#x8FD9;&#x4E2A;&#x5C01;&#x5305;&#x4E3A;&#x786E;&#x8BA4;&#x5C01;&#x5305;&#x3002;&#x5F53; <code>ACK&#xFF1D;0</code> &#x65F6;&#xFF0C;&#x786E;&#x8BA4;&#x53F7;&#x65E0;&#x6548;&#x3002;</li>
<li>PSH&#xFF1A;&#xFF08;Push function&#xFF09;&#x82E5;&#x4E3A; 1 &#x65F6;&#xFF0C;&#x4EE3;&#x8868;&#x8981;&#x6C42;&#x5BF9;&#x65B9;&#x7ACB;&#x5373;&#x4F20;&#x9001;&#x7F13;&#x51B2;&#x533A;&#x5185;&#x7684;&#x5176;&#x4ED6;&#x5BF9;&#x5E94;&#x5C01;&#x5305;&#xFF0C;&#x800C;&#x65E0;&#x9700;&#x7B49;&#x7F13;&#x51B2;&#x6EE1;&#x4E86;&#x624D;&#x9001;&#x3002;</li>
<li>RST&#xFF1A;&#x590D;&#x4F4D;&#x6BD4;&#x7279;(Reset)&#xFF0C;&#x5F53; <code>RST&#xFF1D;1</code> &#x65F6;&#xFF0C;&#x8868;&#x660E; TCP &#x8FDE;&#x63A5;&#x4E2D;&#x51FA;&#x73B0;&#x4E25;&#x91CD;&#x5DEE;&#x9519;&#xFF08;&#x5982;&#x7531;&#x4E8E;&#x4E3B;&#x673A;&#x5D29;&#x6E83;&#x6216;&#x5176;&#x4ED6;&#x539F;&#x56E0;&#xFF09;&#xFF0C;&#x5FC5;&#x987B;&#x91CA;&#x653E;&#x8FDE;&#x63A5;&#xFF0C;&#x7136;&#x540E;&#x518D;&#x91CD;&#x65B0;&#x5EFA;&#x7ACB;&#x8FD0;&#x8F93;&#x8FDE;&#x63A5;&#x3002;</li>
<li>SYN&#xFF1A;&#x540C;&#x6B65;&#x6BD4;&#x7279;(Synchronous)&#xFF0C;SYN &#x7F6E;&#x4E3A; 1&#xFF0C;&#x5C31;&#x8868;&#x793A;&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x8FDE;&#x63A5;&#x8BF7;&#x6C42;&#x6216;&#x8FDE;&#x63A5;&#x63A5;&#x53D7;&#x62A5;&#x6587;&#xFF0C;&#x901A;&#x5E38;&#x5E26;&#x6709; SYN &#x6807;&#x5FD7;&#x7684;&#x5C01;&#x5305;&#x8868;&#x793A;&#x300E;&#x4E3B;&#x52A8;&#x300F;&#x8981;&#x8FDE;&#x63A5;&#x5230;&#x5BF9;&#x65B9;&#x7684;&#x610F;&#x601D;&#x3002;</li>
<li>FIN&#xFF1A;&#x7EC8;&#x6B62;&#x6BD4;&#x7279;(Final)&#xFF0C;&#x7528;&#x6765;&#x91CA;&#x653E;&#x4E00;&#x4E2A;&#x8FDE;&#x63A5;&#x3002;&#x5F53; <code>FIN&#xFF1D;1</code> &#x65F6;&#xFF0C;&#x8868;&#x660E;&#x6B64;&#x62A5;&#x6587;&#x6BB5;&#x7684;&#x53D1;&#x9001;&#x7AEF;&#x7684;&#x6570;&#x636E;&#x5DF2;&#x53D1;&#x9001;&#x5B8C;&#x6BD5;&#xFF0C;&#x5E76;&#x8981;&#x6C42;&#x91CA;&#x653E;&#x8FD0;&#x8F93;&#x8FDE;&#x63A5;&#x3002;</li>
</ul>
<h4 class="mume-header" id="udp">UDP</h4>

<ul>
<li>UDP&#xFF08;User Datagram Protocol&#xFF0C;&#x7528;&#x6237;&#x6570;&#x636E;&#x62A5;&#x534F;&#x8BAE;&#xFF09;&#x662F; OSI&#xFF08;Open System Interconnection &#x5F00;&#x653E;&#x5F0F;&#x7CFB;&#x7EDF;&#x4E92;&#x8054;&#xFF09; &#x53C2;&#x8003;&#x6A21;&#x578B;&#x4E2D;&#x4E00;&#x79CD;&#x65E0;&#x8FDE;&#x63A5;&#x7684;&#x4F20;&#x8F93;&#x5C42;&#x534F;&#x8BAE;&#xFF0C;&#x63D0;&#x4F9B;&#x9762;&#x5411;&#x4E8B;&#x52A1;&#x7684;&#x7B80;&#x5355;&#x4E0D;&#x53EF;&#x9760;&#x4FE1;&#x606F;&#x4F20;&#x9001;&#x670D;&#x52A1;&#xFF0C;&#x5176;&#x4F20;&#x8F93;&#x7684;&#x5355;&#x4F4D;&#x662F;&#x7528;&#x6237;&#x6570;&#x636E;&#x62A5;&#x3002;</li>
</ul>
<p>&#x7279;&#x5F81;&#xFF1A;</p>
<ul>
<li>&#x65E0;&#x8FDE;&#x63A5;</li>
<li>&#x5C3D;&#x6700;&#x5927;&#x52AA;&#x529B;&#x4EA4;&#x4ED8;</li>
<li>&#x9762;&#x5411;&#x62A5;&#x6587;</li>
<li>&#x6CA1;&#x6709;&#x62E5;&#x585E;&#x63A7;&#x5236;</li>
<li>&#x652F;&#x6301;&#x4E00;&#x5BF9;&#x4E00;&#x3001;&#x4E00;&#x5BF9;&#x591A;&#x3001;&#x591A;&#x5BF9;&#x4E00;&#x3001;&#x591A;&#x5BF9;&#x591A;&#x7684;&#x4EA4;&#x4E92;&#x901A;&#x4FE1;</li>
<li>&#x9996;&#x90E8;&#x5F00;&#x9500;&#x5C0F;</li>
</ul>
<p>UDP &#x62A5;&#x6587;&#x7ED3;&#x6784;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/UDP%E6%8A%A5%E6%96%87.png" alt="UDP &#x62A5;&#x6587;"></p>
<p>UDP &#x9996;&#x90E8;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/UDP%E9%A6%96%E9%83%A8.png" alt="UDP &#x9996;&#x90E8;"></p>
<blockquote>
<p>TCP/UDP &#x56FE;&#x7247;&#x6765;&#x6E90;&#x4E8E;&#xFF1A;<a href="https://github.com/JerryC8080/understand-tcp-udp">https://github.com/JerryC8080/understand-tcp-udp</a></p>
</blockquote>
<h4 class="mume-header" id="tcp-%E4%B8%8E-udp-%E7%9A%84%E5%8C%BA%E5%88%AB">TCP &#x4E0E; UDP &#x7684;&#x533A;&#x522B;</h4>

<ol>
<li>TCP &#x9762;&#x5411;&#x8FDE;&#x63A5;&#xFF0C;UDP &#x662F;&#x65E0;&#x8FDE;&#x63A5;&#x7684;&#xFF1B;</li>
<li>TCP &#x63D0;&#x4F9B;&#x53EF;&#x9760;&#x7684;&#x670D;&#x52A1;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#xFF0C;&#x901A;&#x8FC7; TCP &#x8FDE;&#x63A5;&#x4F20;&#x9001;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x65E0;&#x5DEE;&#x9519;&#xFF0C;&#x4E0D;&#x4E22;&#x5931;&#xFF0C;&#x4E0D;&#x91CD;&#x590D;&#xFF0C;&#x4E14;&#x6309;&#x5E8F;&#x5230;&#x8FBE;&#xFF1B;UDP &#x5C3D;&#x6700;&#x5927;&#x52AA;&#x529B;&#x4EA4;&#x4ED8;&#xFF0C;&#x5373;&#x4E0D;&#x4FDD;&#x8BC1;&#x53EF;&#x9760;&#x4EA4;&#x4ED8;</li>
<li>TCP &#x7684;&#x903B;&#x8F91;&#x901A;&#x4FE1;&#x4FE1;&#x9053;&#x662F;&#x5168;&#x53CC;&#x5DE5;&#x7684;&#x53EF;&#x9760;&#x4FE1;&#x9053;&#xFF1B;UDP &#x5219;&#x662F;&#x4E0D;&#x53EF;&#x9760;&#x4FE1;&#x9053;</li>
<li>&#x6BCF;&#x4E00;&#x6761; TCP &#x8FDE;&#x63A5;&#x53EA;&#x80FD;&#x662F;&#x70B9;&#x5230;&#x70B9;&#x7684;&#xFF1B;UDP &#x652F;&#x6301;&#x4E00;&#x5BF9;&#x4E00;&#xFF0C;&#x4E00;&#x5BF9;&#x591A;&#xFF0C;&#x591A;&#x5BF9;&#x4E00;&#x548C;&#x591A;&#x5BF9;&#x591A;&#x7684;&#x4EA4;&#x4E92;&#x901A;&#x4FE1;</li>
<li>TCP &#x9762;&#x5411;&#x5B57;&#x8282;&#x6D41;&#xFF08;&#x53EF;&#x80FD;&#x51FA;&#x73B0;&#x9ECF;&#x5305;&#x95EE;&#x9898;&#xFF09;&#xFF0C;&#x5B9E;&#x9645;&#x4E0A;&#x662F; TCP &#x628A;&#x6570;&#x636E;&#x770B;&#x6210;&#x4E00;&#x8FDE;&#x4E32;&#x65E0;&#x7ED3;&#x6784;&#x7684;&#x5B57;&#x8282;&#x6D41;&#xFF1B;UDP &#x662F;&#x9762;&#x5411;&#x62A5;&#x6587;&#x7684;&#xFF08;&#x4E0D;&#x4F1A;&#x51FA;&#x73B0;&#x9ECF;&#x5305;&#x95EE;&#x9898;&#xFF09;</li>
<li>UDP &#x6CA1;&#x6709;&#x62E5;&#x585E;&#x63A7;&#x5236;&#xFF0C;&#x56E0;&#x6B64;&#x7F51;&#x7EDC;&#x51FA;&#x73B0;&#x62E5;&#x585E;&#x4E0D;&#x4F1A;&#x4F7F;&#x6E90;&#x4E3B;&#x673A;&#x7684;&#x53D1;&#x9001;&#x901F;&#x7387;&#x964D;&#x4F4E;&#xFF08;&#x5BF9;&#x5B9E;&#x65F6;&#x5E94;&#x7528;&#x5F88;&#x6709;&#x7528;&#xFF0C;&#x5982; IP &#x7535;&#x8BDD;&#xFF0C;&#x5B9E;&#x65F6;&#x89C6;&#x9891;&#x4F1A;&#x8BAE;&#x7B49;&#xFF09;</li>
<li>TCP &#x9996;&#x90E8;&#x5F00;&#x9500;20&#x5B57;&#x8282;&#xFF1B;UDP &#x7684;&#x9996;&#x90E8;&#x5F00;&#x9500;&#x5C0F;&#xFF0C;&#x53EA;&#x6709; 8 &#x4E2A;&#x5B57;&#x8282;</li>
</ol>
<h4 class="mume-header" id="tcp-%E9%BB%8F%E5%8C%85%E9%97%AE%E9%A2%98">TCP &#x9ECF;&#x5305;&#x95EE;&#x9898;</h4>

<h5 class="mume-header" id="%E5%8E%9F%E5%9B%A0-2">&#x539F;&#x56E0;</h5>

<p>TCP &#x662F;&#x4E00;&#x4E2A;&#x57FA;&#x4E8E;&#x5B57;&#x8282;&#x6D41;&#x7684;&#x4F20;&#x8F93;&#x670D;&#x52A1;&#xFF08;UDP &#x57FA;&#x4E8E;&#x62A5;&#x6587;&#x7684;&#xFF09;&#xFF0C;&#x201C;&#x6D41;&#x201D; &#x610F;&#x5473;&#x7740; TCP &#x6240;&#x4F20;&#x8F93;&#x7684;&#x6570;&#x636E;&#x662F;&#x6CA1;&#x6709;&#x8FB9;&#x754C;&#x7684;&#x3002;&#x6240;&#x4EE5;&#x53EF;&#x80FD;&#x4F1A;&#x51FA;&#x73B0;&#x4E24;&#x4E2A;&#x6570;&#x636E;&#x5305;&#x9ECF;&#x5728;&#x4E00;&#x8D77;&#x7684;&#x60C5;&#x51B5;&#x3002;</p>
<h5 class="mume-header" id="%E8%A7%A3%E5%86%B3">&#x89E3;&#x51B3;</h5>

<ul>
<li>&#x53D1;&#x9001;&#x5B9A;&#x957F;&#x5305;&#x3002;&#x5982;&#x679C;&#x6BCF;&#x4E2A;&#x6D88;&#x606F;&#x7684;&#x5927;&#x5C0F;&#x90FD;&#x662F;&#x4E00;&#x6837;&#x7684;&#xFF0C;&#x90A3;&#x4E48;&#x5728;&#x63A5;&#x6536;&#x5BF9;&#x7B49;&#x65B9;&#x53EA;&#x8981;&#x7D2F;&#x8BA1;&#x63A5;&#x6536;&#x6570;&#x636E;&#xFF0C;&#x76F4;&#x5230;&#x6570;&#x636E;&#x7B49;&#x4E8E;&#x4E00;&#x4E2A;&#x5B9A;&#x957F;&#x7684;&#x6570;&#x503C;&#x5C31;&#x5C06;&#x5B83;&#x4F5C;&#x4E3A;&#x4E00;&#x4E2A;&#x6D88;&#x606F;&#x3002;</li>
<li>&#x5305;&#x5934;&#x52A0;&#x4E0A;&#x5305;&#x4F53;&#x957F;&#x5EA6;&#x3002;&#x5305;&#x5934;&#x662F;&#x5B9A;&#x957F;&#x7684; 4 &#x4E2A;&#x5B57;&#x8282;&#xFF0C;&#x8BF4;&#x660E;&#x4E86;&#x5305;&#x4F53;&#x7684;&#x957F;&#x5EA6;&#x3002;&#x63A5;&#x6536;&#x5BF9;&#x7B49;&#x65B9;&#x5148;&#x63A5;&#x6536;&#x5305;&#x5934;&#x957F;&#x5EA6;&#xFF0C;&#x4F9D;&#x636E;&#x5305;&#x5934;&#x957F;&#x5EA6;&#x6765;&#x63A5;&#x6536;&#x5305;&#x4F53;&#x3002;</li>
<li>&#x5728;&#x6570;&#x636E;&#x5305;&#x4E4B;&#x95F4;&#x8BBE;&#x7F6E;&#x8FB9;&#x754C;&#xFF0C;&#x5982;&#x6DFB;&#x52A0;&#x7279;&#x6B8A;&#x7B26;&#x53F7; <code>\r\n</code> &#x6807;&#x8BB0;&#x3002;FTP &#x534F;&#x8BAE;&#x6B63;&#x662F;&#x8FD9;&#x4E48;&#x505A;&#x7684;&#x3002;&#x4F46;&#x95EE;&#x9898;&#x5728;&#x4E8E;&#x5982;&#x679C;&#x6570;&#x636E;&#x6B63;&#x6587;&#x4E2D;&#x4E5F;&#x542B;&#x6709; <code>\r\n</code>&#xFF0C;&#x5219;&#x4F1A;&#x8BEF;&#x5224;&#x4E3A;&#x6D88;&#x606F;&#x7684;&#x8FB9;&#x754C;&#x3002;</li>
<li>&#x4F7F;&#x7528;&#x66F4;&#x52A0;&#x590D;&#x6742;&#x7684;&#x5E94;&#x7528;&#x5C42;&#x534F;&#x8BAE;&#x3002;</li>
</ul>
<h4 class="mume-header" id="tcp-%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6">TCP &#x6D41;&#x91CF;&#x63A7;&#x5236;</h4>

<h5 class="mume-header" id="%E6%A6%82%E5%BF%B5-3">&#x6982;&#x5FF5;</h5>

<p>&#x6D41;&#x91CF;&#x63A7;&#x5236;&#xFF08;flow control&#xFF09;&#x5C31;&#x662F;&#x8BA9;&#x53D1;&#x9001;&#x65B9;&#x7684;&#x53D1;&#x9001;&#x901F;&#x7387;&#x4E0D;&#x8981;&#x592A;&#x5FEB;&#xFF0C;&#x8981;&#x8BA9;&#x63A5;&#x6536;&#x65B9;&#x6765;&#x5F97;&#x53CA;&#x63A5;&#x6536;&#x3002;</p>
<h5 class="mume-header" id="%E6%96%B9%E6%B3%95">&#x65B9;&#x6CD5;</h5>

<p>&#x5229;&#x7528;&#x53EF;&#x53D8;&#x7A97;&#x53E3;&#x8FDB;&#x884C;&#x6D41;&#x91CF;&#x63A7;&#x5236;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/%E5%88%A9%E7%94%A8%E5%8F%AF%E5%8F%98%E7%AA%97%E5%8F%A3%E8%BF%9B%E8%A1%8C%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6%E4%B8%BE%E4%BE%8B.png" alt></p>
<h4 class="mume-header" id="tcp-%E6%8B%A5%E5%A1%9E%E6%8E%A7%E5%88%B6">TCP &#x62E5;&#x585E;&#x63A7;&#x5236;</h4>

<h5 class="mume-header" id="%E6%A6%82%E5%BF%B5-4">&#x6982;&#x5FF5;</h5>

<p>&#x62E5;&#x585E;&#x63A7;&#x5236;&#x5C31;&#x662F;&#x9632;&#x6B62;&#x8FC7;&#x591A;&#x7684;&#x6570;&#x636E;&#x6CE8;&#x5165;&#x5230;&#x7F51;&#x7EDC;&#x4E2D;&#xFF0C;&#x8FD9;&#x6837;&#x53EF;&#x4EE5;&#x4F7F;&#x7F51;&#x7EDC;&#x4E2D;&#x7684;&#x8DEF;&#x7531;&#x5668;&#x6216;&#x94FE;&#x8DEF;&#x4E0D;&#x81F4;&#x8FC7;&#x8F7D;&#x3002;</p>
<h5 class="mume-header" id="%E6%96%B9%E6%B3%95-1">&#x65B9;&#x6CD5;</h5>

<ul>
<li>&#x6162;&#x5F00;&#x59CB;( slow-start )</li>
<li>&#x62E5;&#x585E;&#x907F;&#x514D;( congestion avoidance )</li>
<li>&#x5FEB;&#x91CD;&#x4F20;( fast retransmit )</li>
<li>&#x5FEB;&#x6062;&#x590D;( fast recovery )</li>
</ul>
<p>TCP&#x7684;&#x62E5;&#x585E;&#x63A7;&#x5236;&#x56FE;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/TCP%E6%8B%A5%E5%A1%9E%E7%AA%97%E5%8F%A3cwnd%E5%9C%A8%E6%8B%A5%E5%A1%9E%E6%8E%A7%E5%88%B6%E6%97%B6%E7%9A%84%E5%8F%98%E5%8C%96%E6%83%85%E5%86%B5.png" alt><br>
<img src="https://gitee.com/huihut/interview/raw/master/images/%E5%BF%AB%E9%87%8D%E4%BC%A0%E7%A4%BA%E6%84%8F%E5%9B%BE.png" alt><br>
<img src="https://gitee.com/huihut/interview/raw/master/images/TCP%E7%9A%84%E6%8B%A5%E5%A1%9E%E6%8E%A7%E5%88%B6%E6%B5%81%E7%A8%8B%E5%9B%BE.png" alt></p>
<h4 class="mume-header" id="tcp-%E4%BC%A0%E8%BE%93%E8%BF%9E%E6%8E%A5%E7%AE%A1%E7%90%86">TCP &#x4F20;&#x8F93;&#x8FDE;&#x63A5;&#x7BA1;&#x7406;</h4>

<blockquote>
<p>&#x56E0;&#x4E3A; TCP &#x4E09;&#x6B21;&#x63E1;&#x624B;&#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#x3001;&#x56DB;&#x6B21;&#x6325;&#x624B;&#x91CA;&#x653E;&#x8FDE;&#x63A5;&#x5F88;&#x91CD;&#x8981;&#xFF0C;&#x6240;&#x4EE5;&#x9644;&#x4E0A;&#x300A;&#x8BA1;&#x7B97;&#x673A;&#x7F51;&#x7EDC;&#xFF08;&#x7B2C; 7 &#x7248;&#xFF09;-&#x8C22;&#x5E0C;&#x4EC1;&#x300B;&#x4E66;&#x4E2D;&#x5BF9;&#x6B64;&#x7AE0;&#x7684;&#x8BE6;&#x7EC6;&#x63CF;&#x8FF0;&#xFF1A;<a href="https://gitee.com/huihut/interview/raw/master/images/TCP-transport-connection-management.png">https://gitee.com/huihut/interview/raw/master/images/TCP-transport-connection-management.png</a></p>
</blockquote>
<h5 class="mume-header" id="tcp-%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B%E5%BB%BA%E7%AB%8B%E8%BF%9E%E6%8E%A5">TCP &#x4E09;&#x6B21;&#x63E1;&#x624B;&#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;</h5>

<p><img src="https://gitee.com/huihut/interview/raw/master/images/TCP%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B%E5%BB%BA%E7%AB%8B%E8%BF%9E%E6%8E%A5.png" alt="UDP &#x62A5;&#x6587;"></p>
<p>&#x3010;TCP &#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#x5168;&#x8FC7;&#x7A0B;&#x89E3;&#x91CA;&#x3011;</p>
<ol>
<li>&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x9001; SYN &#x7ED9;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x8BF4;&#x660E;&#x5BA2;&#x6237;&#x7AEF;&#x8BF7;&#x6C42;&#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#xFF1B;</li>
<li>&#x670D;&#x52A1;&#x7AEF;&#x6536;&#x5230;&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x7684; SYN&#xFF0C;&#x5E76;&#x56DE;&#x590D; SYN+ACK &#x7ED9;&#x5BA2;&#x6237;&#x7AEF;&#xFF08;&#x540C;&#x610F;&#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#xFF09;&#xFF1B;</li>
<li>&#x5BA2;&#x6237;&#x7AEF;&#x6536;&#x5230;&#x670D;&#x52A1;&#x7AEF;&#x7684; SYN+ACK &#x540E;&#xFF0C;&#x56DE;&#x590D; ACK &#x7ED9;&#x670D;&#x52A1;&#x7AEF;&#xFF08;&#x8868;&#x793A;&#x5BA2;&#x6237;&#x7AEF;&#x6536;&#x5230;&#x4E86;&#x670D;&#x52A1;&#x7AEF;&#x53D1;&#x7684;&#x540C;&#x610F;&#x62A5;&#x6587;&#xFF09;&#xFF1B;</li>
<li>&#x670D;&#x52A1;&#x7AEF;&#x6536;&#x5230;&#x5BA2;&#x6237;&#x7AEF;&#x7684; ACK&#xFF0C;&#x8FDE;&#x63A5;&#x5DF2;&#x5EFA;&#x7ACB;&#xFF0C;&#x53EF;&#x4EE5;&#x6570;&#x636E;&#x4F20;&#x8F93;&#x3002;</li>
</ol>
<h5 class="mume-header" id="tcp-%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E8%BF%9B%E8%A1%8C%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B">TCP &#x4E3A;&#x4EC0;&#x4E48;&#x8981;&#x8FDB;&#x884C;&#x4E09;&#x6B21;&#x63E1;&#x624B;&#xFF1F;</h5>

<p>&#x3010;&#x7B54;&#x6848;&#x4E00;&#x3011;&#x56E0;&#x4E3A;&#x4FE1;&#x9053;&#x4E0D;&#x53EF;&#x9760;&#xFF0C;&#x800C; TCP &#x60F3;&#x5728;&#x4E0D;&#x53EF;&#x9760;&#x4FE1;&#x9053;&#x4E0A;&#x5EFA;&#x7ACB;&#x53EF;&#x9760;&#x5730;&#x4F20;&#x8F93;&#xFF0C;&#x90A3;&#x4E48;&#x4E09;&#x6B21;&#x901A;&#x4FE1;&#x662F;&#x7406;&#x8BBA;&#x4E0A;&#x7684;&#x6700;&#x5C0F;&#x503C;&#x3002;&#xFF08;&#x800C; UDP &#x5219;&#x4E0D;&#x9700;&#x5EFA;&#x7ACB;&#x53EF;&#x9760;&#x4F20;&#x8F93;&#xFF0C;&#x56E0;&#x6B64; UDP &#x4E0D;&#x9700;&#x8981;&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x3002;&#xFF09;</p>
<blockquote>
<p><a href="https://groups.google.com/forum/#!msg/pongba/kF6O7-MFxM0/5S7zIJ4yqKUJ">Google Groups . TCP &#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#x4E3A;&#x4EC0;&#x4E48;&#x662F;&#x4E09;&#x6B21;&#x63E1;&#x624B;&#xFF1F;{&#x6280;&#x672F;}{&#x7F51;&#x7EDC;&#x901A;&#x4FE1;}</a></p>
</blockquote>
<p>&#x3010;&#x7B54;&#x6848;&#x4E8C;&#x3011;&#x56E0;&#x4E3A;&#x53CC;&#x65B9;&#x90FD;&#x9700;&#x8981;&#x786E;&#x8BA4;&#x5BF9;&#x65B9;&#x6536;&#x5230;&#x4E86;&#x81EA;&#x5DF1;&#x53D1;&#x9001;&#x7684;&#x5E8F;&#x5217;&#x53F7;&#xFF0C;&#x786E;&#x8BA4;&#x8FC7;&#x7A0B;&#x6700;&#x5C11;&#x8981;&#x8FDB;&#x884C;&#x4E09;&#x6B21;&#x901A;&#x4FE1;&#x3002;</p>
<blockquote>
<p><a href="https://www.zhihu.com/question/24853633/answer/115173386">&#x77E5;&#x4E4E; . TCP &#x4E3A;&#x4EC0;&#x4E48;&#x662F;&#x4E09;&#x6B21;&#x63E1;&#x624B;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x4E24;&#x6B21;&#x6216;&#x56DB;&#x6B21;&#xFF1F;</a></p>
</blockquote>
<p>&#x3010;&#x7B54;&#x6848;&#x4E09;&#x3011;&#x4E3A;&#x4E86;&#x9632;&#x6B62;&#x5DF2;&#x5931;&#x6548;&#x7684;&#x8FDE;&#x63A5;&#x8BF7;&#x6C42;&#x62A5;&#x6587;&#x6BB5;&#x7A81;&#x7136;&#x53C8;&#x4F20;&#x9001;&#x5230;&#x4E86;&#x670D;&#x52A1;&#x7AEF;&#xFF0C;&#x56E0;&#x800C;&#x4EA7;&#x751F;&#x9519;&#x8BEF;&#x3002;</p>
<blockquote>
<p><a href="https://gitee.com/huihut/interview/raw/master/images/TCP-transport-connection-management.png">&#x300A;&#x8BA1;&#x7B97;&#x673A;&#x7F51;&#x7EDC;&#xFF08;&#x7B2C; 7 &#x7248;&#xFF09;-&#x8C22;&#x5E0C;&#x4EC1;&#x300B;</a></p>
</blockquote>
<h5 class="mume-header" id="tcp-%E5%9B%9B%E6%AC%A1%E6%8C%A5%E6%89%8B%E9%87%8A%E6%94%BE%E8%BF%9E%E6%8E%A5">TCP &#x56DB;&#x6B21;&#x6325;&#x624B;&#x91CA;&#x653E;&#x8FDE;&#x63A5;</h5>

<p><img src="https://gitee.com/huihut/interview/raw/master/images/TCP%E5%9B%9B%E6%AC%A1%E6%8C%A5%E6%89%8B%E9%87%8A%E6%94%BE%E8%BF%9E%E6%8E%A5.png" alt="UDP &#x62A5;&#x6587;"></p>
<p>&#x3010;TCP &#x91CA;&#x653E;&#x8FDE;&#x63A5;&#x5168;&#x8FC7;&#x7A0B;&#x89E3;&#x91CA;&#x3011;</p>
<ol>
<li>&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x9001; FIN &#x7ED9;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x8BF4;&#x660E;&#x5BA2;&#x6237;&#x7AEF;&#x4E0D;&#x5FC5;&#x53D1;&#x9001;&#x6570;&#x636E;&#x7ED9;&#x670D;&#x52A1;&#x5668;&#x4E86;&#xFF08;&#x8BF7;&#x6C42;&#x91CA;&#x653E;&#x4ECE;&#x5BA2;&#x6237;&#x7AEF;&#x5230;&#x670D;&#x52A1;&#x5668;&#x7684;&#x8FDE;&#x63A5;&#xFF09;&#xFF1B;</li>
<li>&#x670D;&#x52A1;&#x5668;&#x63A5;&#x6536;&#x5230;&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x7684; FIN&#xFF0C;&#x5E76;&#x56DE;&#x590D; ACK &#x7ED9;&#x5BA2;&#x6237;&#x7AEF;&#xFF08;&#x540C;&#x610F;&#x91CA;&#x653E;&#x4ECE;&#x5BA2;&#x6237;&#x7AEF;&#x5230;&#x670D;&#x52A1;&#x5668;&#x7684;&#x8FDE;&#x63A5;&#xFF09;&#xFF1B;</li>
<li>&#x5BA2;&#x6237;&#x7AEF;&#x6536;&#x5230;&#x670D;&#x52A1;&#x7AEF;&#x56DE;&#x590D;&#x7684; ACK&#xFF0C;&#x6B64;&#x65F6;&#x4ECE;&#x5BA2;&#x6237;&#x7AEF;&#x5230;&#x670D;&#x52A1;&#x5668;&#x7684;&#x8FDE;&#x63A5;&#x5DF2;&#x91CA;&#x653E;&#xFF08;&#x4F46;&#x670D;&#x52A1;&#x7AEF;&#x5230;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x8FDE;&#x63A5;&#x8FD8;&#x672A;&#x91CA;&#x653E;&#xFF0C;&#x5E76;&#x4E14;&#x5BA2;&#x6237;&#x7AEF;&#x8FD8;&#x53EF;&#x4EE5;&#x63A5;&#x6536;&#x6570;&#x636E;&#xFF09;&#xFF1B;</li>
<li>&#x670D;&#x52A1;&#x7AEF;&#x7EE7;&#x7EED;&#x53D1;&#x9001;&#x4E4B;&#x524D;&#x6CA1;&#x53D1;&#x5B8C;&#x7684;&#x6570;&#x636E;&#x7ED9;&#x5BA2;&#x6237;&#x7AEF;&#xFF1B;</li>
<li>&#x670D;&#x52A1;&#x7AEF;&#x53D1;&#x9001; FIN+ACK &#x7ED9;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x8BF4;&#x660E;&#x670D;&#x52A1;&#x7AEF;&#x53D1;&#x9001;&#x5B8C;&#x4E86;&#x6570;&#x636E;&#xFF08;&#x8BF7;&#x6C42;&#x91CA;&#x653E;&#x4ECE;&#x670D;&#x52A1;&#x7AEF;&#x5230;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x8FDE;&#x63A5;&#xFF0C;&#x5C31;&#x7B97;&#x6CA1;&#x6536;&#x5230;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x56DE;&#x590D;&#xFF0C;&#x8FC7;&#x6BB5;&#x65F6;&#x95F4;&#x4E5F;&#x4F1A;&#x81EA;&#x52A8;&#x91CA;&#x653E;&#xFF09;&#xFF1B;</li>
<li>&#x5BA2;&#x6237;&#x7AEF;&#x6536;&#x5230;&#x670D;&#x52A1;&#x7AEF;&#x7684; FIN+ACK&#xFF0C;&#x5E76;&#x56DE;&#x590D; ACK &#x7ED9;&#x5BA2;&#x6237;&#x7AEF;&#xFF08;&#x540C;&#x610F;&#x91CA;&#x653E;&#x4ECE;&#x670D;&#x52A1;&#x7AEF;&#x5230;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x8FDE;&#x63A5;&#xFF09;&#xFF1B;</li>
<li>&#x670D;&#x52A1;&#x7AEF;&#x6536;&#x5230;&#x5BA2;&#x6237;&#x7AEF;&#x7684; ACK &#x540E;&#xFF0C;&#x91CA;&#x653E;&#x4ECE;&#x670D;&#x52A1;&#x7AEF;&#x5230;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x8FDE;&#x63A5;&#x3002;</li>
</ol>
<h5 class="mume-header" id="tcp-%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E8%BF%9B%E8%A1%8C%E5%9B%9B%E6%AC%A1%E6%8C%A5%E6%89%8B">TCP &#x4E3A;&#x4EC0;&#x4E48;&#x8981;&#x8FDB;&#x884C;&#x56DB;&#x6B21;&#x6325;&#x624B;&#xFF1F;</h5>

<p>&#x3010;&#x95EE;&#x9898;&#x4E00;&#x3011;TCP &#x4E3A;&#x4EC0;&#x4E48;&#x8981;&#x8FDB;&#x884C;&#x56DB;&#x6B21;&#x6325;&#x624B;&#xFF1F; / &#x4E3A;&#x4EC0;&#x4E48; TCP &#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#x9700;&#x8981;&#x4E09;&#x6B21;&#xFF0C;&#x800C;&#x91CA;&#x653E;&#x8FDE;&#x63A5;&#x5219;&#x9700;&#x8981;&#x56DB;&#x6B21;&#xFF1F;</p>
<p>&#x3010;&#x7B54;&#x6848;&#x4E00;&#x3011;&#x56E0;&#x4E3A; TCP &#x662F;&#x5168;&#x53CC;&#x5DE5;&#x6A21;&#x5F0F;&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x8BF7;&#x6C42;&#x5173;&#x95ED;&#x8FDE;&#x63A5;&#x540E;&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x5411;&#x670D;&#x52A1;&#x7AEF;&#x7684;&#x8FDE;&#x63A5;&#x5173;&#x95ED;&#xFF08;&#x4E00;&#x4E8C;&#x6B21;&#x6325;&#x624B;&#xFF09;&#xFF0C;&#x670D;&#x52A1;&#x7AEF;&#x7EE7;&#x7EED;&#x4F20;&#x8F93;&#x4E4B;&#x524D;&#x6CA1;&#x4F20;&#x5B8C;&#x7684;&#x6570;&#x636E;&#x7ED9;&#x5BA2;&#x6237;&#x7AEF;&#xFF08;&#x6570;&#x636E;&#x4F20;&#x8F93;&#xFF09;&#xFF0C;&#x670D;&#x52A1;&#x7AEF;&#x5411;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x8FDE;&#x63A5;&#x5173;&#x95ED;&#xFF08;&#x4E09;&#x56DB;&#x6B21;&#x6325;&#x624B;&#xFF09;&#x3002;&#x6240;&#x4EE5; TCP &#x91CA;&#x653E;&#x8FDE;&#x63A5;&#x65F6;&#x670D;&#x52A1;&#x5668;&#x7684; ACK &#x548C; FIN &#x662F;&#x5206;&#x5F00;&#x53D1;&#x9001;&#x7684;&#xFF08;&#x4E2D;&#x95F4;&#x9694;&#x7740;&#x6570;&#x636E;&#x4F20;&#x8F93;&#xFF09;&#xFF0C;&#x800C; TCP &#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#x65F6;&#x670D;&#x52A1;&#x5668;&#x7684; ACK &#x548C; SYN &#x662F;&#x4E00;&#x8D77;&#x53D1;&#x9001;&#x7684;&#xFF08;&#x7B2C;&#x4E8C;&#x6B21;&#x63E1;&#x624B;&#xFF09;&#xFF0C;&#x6240;&#x4EE5; TCP &#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#x9700;&#x8981;&#x4E09;&#x6B21;&#xFF0C;&#x800C;&#x91CA;&#x653E;&#x8FDE;&#x63A5;&#x5219;&#x9700;&#x8981;&#x56DB;&#x6B21;&#x3002;</p>
<p>&#x3010;&#x95EE;&#x9898;&#x4E8C;&#x3011;&#x4E3A;&#x4EC0;&#x4E48; TCP &#x8FDE;&#x63A5;&#x65F6;&#x53EF;&#x4EE5; ACK &#x548C; SYN &#x4E00;&#x8D77;&#x53D1;&#x9001;&#xFF0C;&#x800C;&#x91CA;&#x653E;&#x65F6;&#x5219; ACK &#x548C; FIN &#x5206;&#x5F00;&#x53D1;&#x9001;&#x5462;&#xFF1F;&#xFF08;ACK &#x548C; FIN &#x5206;&#x5F00;&#x662F;&#x6307;&#x7B2C;&#x4E8C;&#x6B21;&#x548C;&#x7B2C;&#x4E09;&#x6B21;&#x6325;&#x624B;&#xFF09;</p>
<p>&#x3010;&#x7B54;&#x6848;&#x4E8C;&#x3011;&#x56E0;&#x4E3A;&#x5BA2;&#x6237;&#x7AEF;&#x8BF7;&#x6C42;&#x91CA;&#x653E;&#x65F6;&#xFF0C;&#x670D;&#x52A1;&#x5668;&#x53EF;&#x80FD;&#x8FD8;&#x6709;&#x6570;&#x636E;&#x9700;&#x8981;&#x4F20;&#x8F93;&#x7ED9;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x56E0;&#x6B64;&#x670D;&#x52A1;&#x7AEF;&#x8981;&#x5148;&#x54CD;&#x5E94;&#x5BA2;&#x6237;&#x7AEF; FIN &#x8BF7;&#x6C42;&#xFF08;&#x670D;&#x52A1;&#x7AEF;&#x53D1;&#x9001; ACK&#xFF09;&#xFF0C;&#x7136;&#x540E;&#x6570;&#x636E;&#x4F20;&#x8F93;&#xFF0C;&#x4F20;&#x8F93;&#x5B8C;&#x6210;&#x540E;&#xFF0C;&#x670D;&#x52A1;&#x7AEF;&#x518D;&#x63D0;&#x51FA; FIN &#x8BF7;&#x6C42;&#xFF08;&#x670D;&#x52A1;&#x7AEF;&#x53D1;&#x9001; FIN&#xFF09;&#xFF1B;&#x800C;&#x8FDE;&#x63A5;&#x65F6;&#x5219;&#x6CA1;&#x6709;&#x4E2D;&#x95F4;&#x7684;&#x6570;&#x636E;&#x4F20;&#x8F93;&#xFF0C;&#x56E0;&#x6B64;&#x8FDE;&#x63A5;&#x65F6;&#x53EF;&#x4EE5; ACK &#x548C; SYN &#x4E00;&#x8D77;&#x53D1;&#x9001;&#x3002;</p>
<p>&#x3010;&#x95EE;&#x9898;&#x4E09;&#x3011;&#x4E3A;&#x4EC0;&#x4E48;&#x5BA2;&#x6237;&#x7AEF;&#x91CA;&#x653E;&#x6700;&#x540E;&#x9700;&#x8981; TIME-WAIT &#x7B49;&#x5F85; 2MSL &#x5462;&#xFF1F;</p>
<p>&#x3010;&#x7B54;&#x6848;&#x4E09;&#x3011;</p>
<ol>
<li>&#x4E3A;&#x4E86;&#x4FDD;&#x8BC1;&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x9001;&#x7684;&#x6700;&#x540E;&#x4E00;&#x4E2A; ACK &#x62A5;&#x6587;&#x80FD;&#x591F;&#x5230;&#x8FBE;&#x670D;&#x52A1;&#x7AEF;&#x3002;&#x82E5;&#x672A;&#x6210;&#x529F;&#x5230;&#x8FBE;&#xFF0C;&#x5219;&#x670D;&#x52A1;&#x7AEF;&#x8D85;&#x65F6;&#x91CD;&#x4F20; FIN+ACK &#x62A5;&#x6587;&#x6BB5;&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x518D;&#x91CD;&#x4F20; ACK&#xFF0C;&#x5E76;&#x91CD;&#x65B0;&#x8BA1;&#x65F6;&#x3002;</li>
<li>&#x9632;&#x6B62;&#x5DF2;&#x5931;&#x6548;&#x7684;&#x8FDE;&#x63A5;&#x8BF7;&#x6C42;&#x62A5;&#x6587;&#x6BB5;&#x51FA;&#x73B0;&#x5728;&#x672C;&#x8FDE;&#x63A5;&#x4E2D;&#x3002;TIME-WAIT &#x6301;&#x7EED; 2MSL &#x53EF;&#x4F7F;&#x672C;&#x8FDE;&#x63A5;&#x6301;&#x7EED;&#x7684;&#x65F6;&#x95F4;&#x5185;&#x6240;&#x4EA7;&#x751F;&#x7684;&#x6240;&#x6709;&#x62A5;&#x6587;&#x6BB5;&#x90FD;&#x4ECE;&#x7F51;&#x7EDC;&#x4E2D;&#x6D88;&#x5931;&#xFF0C;&#x8FD9;&#x6837;&#x53EF;&#x4F7F;&#x4E0B;&#x6B21;&#x8FDE;&#x63A5;&#x4E2D;&#x4E0D;&#x4F1A;&#x51FA;&#x73B0;&#x65E7;&#x7684;&#x8FDE;&#x63A5;&#x62A5;&#x6587;&#x6BB5;&#x3002;</li>
</ol>
<h4 class="mume-header" id="tcp-%E6%9C%89%E9%99%90%E7%8A%B6%E6%80%81%E6%9C%BA">TCP &#x6709;&#x9650;&#x72B6;&#x6001;&#x673A;</h4>

<p>TCP &#x6709;&#x9650;&#x72B6;&#x6001;&#x673A;&#x56FE;&#x7247;</p>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/TCP%E7%9A%84%E6%9C%89%E9%99%90%E7%8A%B6%E6%80%81%E6%9C%BA.png" alt="TCP &#x7684;&#x6709;&#x9650;&#x72B6;&#x6001;&#x673A;"></p>
<h3 class="mume-header" id="%E5%BA%94%E7%94%A8%E5%B1%82">&#x5E94;&#x7528;&#x5C42;</h3>

<h4 class="mume-header" id="dns">DNS</h4>

<ul>
<li>DNS&#xFF08;Domain Name System&#xFF0C;&#x57DF;&#x540D;&#x7CFB;&#x7EDF;&#xFF09;&#x662F;&#x4E92;&#x8054;&#x7F51;&#x7684;&#x4E00;&#x9879;&#x670D;&#x52A1;&#x3002;&#x5B83;&#x4F5C;&#x4E3A;&#x5C06;&#x57DF;&#x540D;&#x548C; IP &#x5730;&#x5740;&#x76F8;&#x4E92;&#x6620;&#x5C04;&#x7684;&#x4E00;&#x4E2A;&#x5206;&#x5E03;&#x5F0F;&#x6570;&#x636E;&#x5E93;&#xFF0C;&#x80FD;&#x591F;&#x4F7F;&#x4EBA;&#x66F4;&#x65B9;&#x4FBF;&#x5730;&#x8BBF;&#x95EE;&#x4E92;&#x8054;&#x7F51;&#x3002;DNS &#x4F7F;&#x7528; TCP &#x548C; UDP &#x7AEF;&#x53E3; 53&#x3002;&#x5F53;&#x524D;&#xFF0C;&#x5BF9;&#x4E8E;&#x6BCF;&#x4E00;&#x7EA7;&#x57DF;&#x540D;&#x957F;&#x5EA6;&#x7684;&#x9650;&#x5236;&#x662F; 63 &#x4E2A;&#x5B57;&#x7B26;&#xFF0C;&#x57DF;&#x540D;&#x603B;&#x957F;&#x5EA6;&#x5219;&#x4E0D;&#x80FD;&#x8D85;&#x8FC7; 253 &#x4E2A;&#x5B57;&#x7B26;&#x3002;</li>
</ul>
<p>&#x57DF;&#x540D;&#xFF1A;</p>
<ul>
<li><code>&#x57DF;&#x540D; ::= {&lt;&#x4E09;&#x7EA7;&#x57DF;&#x540D;&gt;.&lt;&#x4E8C;&#x7EA7;&#x57DF;&#x540D;&gt;.&lt;&#x9876;&#x7EA7;&#x57DF;&#x540D;&gt;}</code>&#xFF0C;&#x5982;&#xFF1A;<code>blog.huihut.com</code></li>
</ul>
<h4 class="mume-header" id="ftp">FTP</h4>

<ul>
<li>FTP&#xFF08;File Transfer Protocol&#xFF0C;&#x6587;&#x4EF6;&#x4F20;&#x8F93;&#x534F;&#x8BAE;&#xFF09;&#x662F;&#x7528;&#x4E8E;&#x5728;&#x7F51;&#x7EDC;&#x4E0A;&#x8FDB;&#x884C;&#x6587;&#x4EF6;&#x4F20;&#x8F93;&#x7684;&#x4E00;&#x5957;&#x6807;&#x51C6;&#x534F;&#x8BAE;&#xFF0C;&#x4F7F;&#x7528;&#x5BA2;&#x6237;/&#x670D;&#x52A1;&#x5668;&#x6A21;&#x5F0F;&#xFF0C;&#x4F7F;&#x7528; TCP &#x6570;&#x636E;&#x62A5;&#xFF0C;&#x63D0;&#x4F9B;&#x4EA4;&#x4E92;&#x5F0F;&#x8BBF;&#x95EE;&#xFF0C;&#x53CC;&#x5411;&#x4F20;&#x8F93;&#x3002;</li>
<li>TFTP&#xFF08;Trivial File Transfer Protocol&#xFF0C;&#x7B80;&#x5355;&#x6587;&#x4EF6;&#x4F20;&#x8F93;&#x534F;&#x8BAE;&#xFF09;&#x4E00;&#x4E2A;&#x5C0F;&#x4E14;&#x6613;&#x5B9E;&#x73B0;&#x7684;&#x6587;&#x4EF6;&#x4F20;&#x8F93;&#x534F;&#x8BAE;&#xFF0C;&#x4E5F;&#x4F7F;&#x7528;&#x5BA2;&#x6237;-&#x670D;&#x52A1;&#x5668;&#x65B9;&#x5F0F;&#xFF0C;&#x4F7F;&#x7528;UDP&#x6570;&#x636E;&#x62A5;&#xFF0C;&#x53EA;&#x652F;&#x6301;&#x6587;&#x4EF6;&#x4F20;&#x8F93;&#x800C;&#x4E0D;&#x652F;&#x6301;&#x4EA4;&#x4E92;&#xFF0C;&#x6CA1;&#x6709;&#x5217;&#x76EE;&#x5F55;&#xFF0C;&#x4E0D;&#x80FD;&#x5BF9;&#x7528;&#x6237;&#x8FDB;&#x884C;&#x8EAB;&#x4EFD;&#x9274;&#x5B9A;</li>
</ul>
<h4 class="mume-header" id="telnet">TELNET</h4>

<ul>
<li>
<p>TELNET &#x534F;&#x8BAE;&#x662F; TCP/IP &#x534F;&#x8BAE;&#x65CF;&#x4E2D;&#x7684;&#x4E00;&#x5458;&#xFF0C;&#x662F; Internet &#x8FDC;&#x7A0B;&#x767B;&#x9646;&#x670D;&#x52A1;&#x7684;&#x6807;&#x51C6;&#x534F;&#x8BAE;&#x548C;&#x4E3B;&#x8981;&#x65B9;&#x5F0F;&#x3002;&#x5B83;&#x4E3A;&#x7528;&#x6237;&#x63D0;&#x4F9B;&#x4E86;&#x5728;&#x672C;&#x5730;&#x8BA1;&#x7B97;&#x673A;&#x4E0A;&#x5B8C;&#x6210;&#x8FDC;&#x7A0B;&#x4E3B;&#x673A;&#x5DE5;&#x4F5C;&#x7684;&#x80FD;&#x529B;&#x3002;</p>
</li>
<li>
<p>HTTP&#xFF08;HyperText Transfer Protocol&#xFF0C;&#x8D85;&#x6587;&#x672C;&#x4F20;&#x8F93;&#x534F;&#x8BAE;&#xFF09;&#x662F;&#x7528;&#x4E8E;&#x4ECE; WWW&#xFF08;World Wide Web&#xFF0C;&#x4E07;&#x7EF4;&#x7F51;&#xFF09;&#x670D;&#x52A1;&#x5668;&#x4F20;&#x8F93;&#x8D85;&#x6587;&#x672C;&#x5230;&#x672C;&#x5730;&#x6D4F;&#x89C8;&#x5668;&#x7684;&#x4F20;&#x9001;&#x534F;&#x8BAE;&#x3002;</p>
</li>
<li>
<p>SMTP&#xFF08;Simple Mail Transfer Protocol&#xFF0C;&#x7B80;&#x5355;&#x90AE;&#x4EF6;&#x4F20;&#x8F93;&#x534F;&#x8BAE;&#xFF09;&#x662F;&#x4E00;&#x7EC4;&#x7528;&#x4E8E;&#x7531;&#x6E90;&#x5730;&#x5740;&#x5230;&#x76EE;&#x7684;&#x5730;&#x5740;&#x4F20;&#x9001;&#x90AE;&#x4EF6;&#x7684;&#x89C4;&#x5219;&#xFF0C;&#x7531;&#x5B83;&#x6765;&#x63A7;&#x5236;&#x4FE1;&#x4EF6;&#x7684;&#x4E2D;&#x8F6C;&#x65B9;&#x5F0F;&#x3002;SMTP &#x534F;&#x8BAE;&#x5C5E;&#x4E8E; TCP/IP &#x534F;&#x8BAE;&#x7C07;&#xFF0C;&#x5B83;&#x5E2E;&#x52A9;&#x6BCF;&#x53F0;&#x8BA1;&#x7B97;&#x673A;&#x5728;&#x53D1;&#x9001;&#x6216;&#x4E2D;&#x8F6C;&#x4FE1;&#x4EF6;&#x65F6;&#x627E;&#x5230;&#x4E0B;&#x4E00;&#x4E2A;&#x76EE;&#x7684;&#x5730;&#x3002;</p>
</li>
<li>
<p>Socket &#x5EFA;&#x7ACB;&#x7F51;&#x7EDC;&#x901A;&#x4FE1;&#x8FDE;&#x63A5;&#x81F3;&#x5C11;&#x8981;&#x4E00;&#x5BF9;&#x7AEF;&#x53E3;&#x53F7;&#xFF08;Socket&#xFF09;&#x3002;Socket &#x672C;&#x8D28;&#x662F;&#x7F16;&#x7A0B;&#x63A5;&#x53E3;&#xFF08;API&#xFF09;&#xFF0C;&#x5BF9; TCP/IP &#x7684;&#x5C01;&#x88C5;&#xFF0C;TCP/IP &#x4E5F;&#x8981;&#x63D0;&#x4F9B;&#x53EF;&#x4F9B;&#x7A0B;&#x5E8F;&#x5458;&#x505A;&#x7F51;&#x7EDC;&#x5F00;&#x53D1;&#x6240;&#x7528;&#x7684;&#x63A5;&#x53E3;&#xFF0C;&#x8FD9;&#x5C31;&#x662F; Socket &#x7F16;&#x7A0B;&#x63A5;&#x53E3;&#x3002;</p>
</li>
</ul>
<h4 class="mume-header" id="www">WWW</h4>

<ul>
<li>WWW&#xFF08;World Wide Web&#xFF0C;&#x73AF;&#x7403;&#x4FE1;&#x606F;&#x7F51;&#xFF0C;&#x4E07;&#x7EF4;&#x7F51;&#xFF09;&#x662F;&#x4E00;&#x4E2A;&#x7531;&#x8BB8;&#x591A;&#x4E92;&#x76F8;&#x94FE;&#x63A5;&#x7684;&#x8D85;&#x6587;&#x672C;&#x7EC4;&#x6210;&#x7684;&#x7CFB;&#x7EDF;&#xFF0C;&#x901A;&#x8FC7;&#x4E92;&#x8054;&#x7F51;&#x8BBF;&#x95EE;</li>
</ul>
<h5 class="mume-header" id="url">URL</h5>

<ul>
<li>URL&#xFF08;Uniform Resource Locator&#xFF0C;&#x7EDF;&#x4E00;&#x8D44;&#x6E90;&#x5B9A;&#x4F4D;&#x7B26;&#xFF09;&#x662F;&#x56E0;&#x7279;&#x7F51;&#x4E0A;&#x6807;&#x51C6;&#x7684;&#x8D44;&#x6E90;&#x7684;&#x5730;&#x5740;&#xFF08;Address&#xFF09;</li>
</ul>
<p>&#x6807;&#x51C6;&#x683C;&#x5F0F;&#xFF1A;</p>
<ul>
<li><code>&#x534F;&#x8BAE;&#x7C7B;&#x578B;:[//&#x670D;&#x52A1;&#x5668;&#x5730;&#x5740;[:&#x7AEF;&#x53E3;&#x53F7;]][/&#x8D44;&#x6E90;&#x5C42;&#x7EA7;UNIX&#x6587;&#x4EF6;&#x8DEF;&#x5F84;]&#x6587;&#x4EF6;&#x540D;[?&#x67E5;&#x8BE2;][#&#x7247;&#x6BB5;ID]</code></li>
</ul>
<p>&#x5B8C;&#x6574;&#x683C;&#x5F0F;&#xFF1A;</p>
<ul>
<li><code>&#x534F;&#x8BAE;&#x7C7B;&#x578B;:[//[&#x8BBF;&#x95EE;&#x8D44;&#x6E90;&#x9700;&#x8981;&#x7684;&#x51ED;&#x8BC1;&#x4FE1;&#x606F;@]&#x670D;&#x52A1;&#x5668;&#x5730;&#x5740;[:&#x7AEF;&#x53E3;&#x53F7;]][/&#x8D44;&#x6E90;&#x5C42;&#x7EA7;UNIX&#x6587;&#x4EF6;&#x8DEF;&#x5F84;]&#x6587;&#x4EF6;&#x540D;[?&#x67E5;&#x8BE2;][#&#x7247;&#x6BB5;ID]</code></li>
</ul>
<blockquote>
<p>&#x5176;&#x4E2D;&#x3010;&#x8BBF;&#x95EE;&#x51ED;&#x8BC1;&#x4FE1;&#x606F;@&#xFF1B;:&#x7AEF;&#x53E3;&#x53F7;&#xFF1B;?&#x67E5;&#x8BE2;&#xFF1B;#&#x7247;&#x6BB5;ID&#x3011;&#x90FD;&#x5C5E;&#x4E8E;&#x9009;&#x586B;&#x9879;<br>
&#x5982;&#xFF1A;<code>https://github.com/huihut/interview#cc</code></p>
</blockquote>
<h5 class="mume-header" id="http">HTTP</h5>

<p>HTTP&#xFF08;HyperText Transfer Protocol&#xFF0C;&#x8D85;&#x6587;&#x672C;&#x4F20;&#x8F93;&#x534F;&#x8BAE;&#xFF09;&#x662F;&#x4E00;&#x79CD;&#x7528;&#x4E8E;&#x5206;&#x5E03;&#x5F0F;&#x3001;&#x534F;&#x4F5C;&#x5F0F;&#x548C;&#x8D85;&#x5A92;&#x4F53;&#x4FE1;&#x606F;&#x7CFB;&#x7EDF;&#x7684;&#x5E94;&#x7528;&#x5C42;&#x534F;&#x8BAE;&#x3002;HTTP &#x662F;&#x4E07;&#x7EF4;&#x7F51;&#x7684;&#x6570;&#x636E;&#x901A;&#x4FE1;&#x7684;&#x57FA;&#x7840;&#x3002;</p>
<p>&#x8BF7;&#x6C42;&#x65B9;&#x6CD5;</p>
<table>
<thead>
<tr>
<th>&#x65B9;&#x6CD5;</th>
<th>&#x610F;&#x4E49;</th>
</tr>
</thead>
<tbody>
<tr>
<td>OPTIONS</td>
<td>&#x8BF7;&#x6C42;&#x4E00;&#x4E9B;&#x9009;&#x9879;&#x4FE1;&#x606F;&#xFF0C;&#x5141;&#x8BB8;&#x5BA2;&#x6237;&#x7AEF;&#x67E5;&#x770B;&#x670D;&#x52A1;&#x5668;&#x7684;&#x6027;&#x80FD;</td>
</tr>
<tr>
<td>GET</td>
<td>&#x8BF7;&#x6C42;&#x6307;&#x5B9A;&#x7684;&#x9875;&#x9762;&#x4FE1;&#x606F;&#xFF0C;&#x5E76;&#x8FD4;&#x56DE;&#x5B9E;&#x4F53;&#x4E3B;&#x4F53;</td>
</tr>
<tr>
<td>HEAD</td>
<td>&#x7C7B;&#x4F3C;&#x4E8E; get &#x8BF7;&#x6C42;&#xFF0C;&#x53EA;&#x4E0D;&#x8FC7;&#x8FD4;&#x56DE;&#x7684;&#x54CD;&#x5E94;&#x4E2D;&#x6CA1;&#x6709;&#x5177;&#x4F53;&#x7684;&#x5185;&#x5BB9;&#xFF0C;&#x7528;&#x4E8E;&#x83B7;&#x53D6;&#x62A5;&#x5934;</td>
</tr>
<tr>
<td>POST</td>
<td>&#x5411;&#x6307;&#x5B9A;&#x8D44;&#x6E90;&#x63D0;&#x4EA4;&#x6570;&#x636E;&#x8FDB;&#x884C;&#x5904;&#x7406;&#x8BF7;&#x6C42;&#xFF08;&#x4F8B;&#x5982;&#x63D0;&#x4EA4;&#x8868;&#x5355;&#x6216;&#x8005;&#x4E0A;&#x4F20;&#x6587;&#x4EF6;&#xFF09;&#x3002;&#x6570;&#x636E;&#x88AB;&#x5305;&#x542B;&#x5728;&#x8BF7;&#x6C42;&#x4F53;&#x4E2D;&#x3002;POST&#x8BF7;&#x6C42;&#x53EF;&#x80FD;&#x4F1A;&#x5BFC;&#x81F4;&#x65B0;&#x7684;&#x8D44;&#x6E90;&#x7684;&#x5EFA;&#x7ACB;&#x548C;/&#x6216;&#x5DF2;&#x6709;&#x8D44;&#x6E90;&#x7684;&#x4FEE;&#x6539;</td>
</tr>
<tr>
<td>PUT</td>
<td>&#x4ECE;&#x5BA2;&#x6237;&#x7AEF;&#x5411;&#x670D;&#x52A1;&#x5668;&#x4F20;&#x9001;&#x7684;&#x6570;&#x636E;&#x53D6;&#x4EE3;&#x6307;&#x5B9A;&#x7684;&#x6587;&#x6863;&#x7684;&#x5185;&#x5BB9;</td>
</tr>
<tr>
<td>DELETE</td>
<td>&#x8BF7;&#x6C42;&#x670D;&#x52A1;&#x5668;&#x5220;&#x9664;&#x6307;&#x5B9A;&#x7684;&#x9875;&#x9762;</td>
</tr>
<tr>
<td>TRACE</td>
<td>&#x56DE;&#x663E;&#x670D;&#x52A1;&#x5668;&#x6536;&#x5230;&#x7684;&#x8BF7;&#x6C42;&#xFF0C;&#x4E3B;&#x8981;&#x7528;&#x4E8E;&#x6D4B;&#x8BD5;&#x6216;&#x8BCA;&#x65AD;</td>
</tr>
</tbody>
</table>
<p>&#x72B6;&#x6001;&#x7801;&#xFF08;Status-Code&#xFF09;</p>
<ul>
<li>1xx&#xFF1A;&#x8868;&#x793A;&#x901A;&#x77E5;&#x4FE1;&#x606F;&#xFF0C;&#x5982;&#x8BF7;&#x6C42;&#x6536;&#x5230;&#x4E86;&#x6216;&#x6B63;&#x5728;&#x8FDB;&#x884C;&#x5904;&#x7406;
<ul>
<li>100 Continue&#xFF1A;&#x7EE7;&#x7EED;&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x5E94;&#x7EE7;&#x7EED;&#x5176;&#x8BF7;&#x6C42;</li>
<li>101 Switching Protocols &#x5207;&#x6362;&#x534F;&#x8BAE;&#x3002;&#x670D;&#x52A1;&#x5668;&#x6839;&#x636E;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x8BF7;&#x6C42;&#x5207;&#x6362;&#x534F;&#x8BAE;&#x3002;&#x53EA;&#x80FD;&#x5207;&#x6362;&#x5230;&#x66F4;&#x9AD8;&#x7EA7;&#x7684;&#x534F;&#x8BAE;&#xFF0C;&#x4F8B;&#x5982;&#xFF0C;&#x5207;&#x6362;&#x5230; HTTP &#x7684;&#x65B0;&#x7248;&#x672C;&#x534F;&#x8BAE;</li>
</ul>
</li>
<li>2xx&#xFF1A;&#x8868;&#x793A;&#x6210;&#x529F;&#xFF0C;&#x5982;&#x63A5;&#x6536;&#x6216;&#x77E5;&#x9053;&#x4E86;
<ul>
<li>200 OK: &#x8BF7;&#x6C42;&#x6210;&#x529F;</li>
</ul>
</li>
<li>3xx&#xFF1A;&#x8868;&#x793A;&#x91CD;&#x5B9A;&#x5411;&#xFF0C;&#x5982;&#x8981;&#x5B8C;&#x6210;&#x8BF7;&#x6C42;&#x8FD8;&#x5FC5;&#x987B;&#x91C7;&#x53D6;&#x8FDB;&#x4E00;&#x6B65;&#x7684;&#x884C;&#x52A8;
<ul>
<li>301 Moved Permanently: &#x6C38;&#x4E45;&#x79FB;&#x52A8;&#x3002;&#x8BF7;&#x6C42;&#x7684;&#x8D44;&#x6E90;&#x5DF2;&#x88AB;&#x6C38;&#x4E45;&#x7684;&#x79FB;&#x52A8;&#x5230;&#x65B0; URL&#xFF0C;&#x8FD4;&#x56DE;&#x4FE1;&#x606F;&#x4F1A;&#x5305;&#x62EC;&#x65B0;&#x7684; URL&#xFF0C;&#x6D4F;&#x89C8;&#x5668;&#x4F1A;&#x81EA;&#x52A8;&#x5B9A;&#x5411;&#x5230;&#x65B0; URL&#x3002;&#x4ECA;&#x540E;&#x4EFB;&#x4F55;&#x65B0;&#x7684;&#x8BF7;&#x6C42;&#x90FD;&#x5E94;&#x4F7F;&#x7528;&#x65B0;&#x7684; URL &#x4EE3;&#x66FF;</li>
</ul>
</li>
<li>4xx&#xFF1A;&#x8868;&#x793A;&#x5BA2;&#x6237;&#x7684;&#x5DEE;&#x9519;&#xFF0C;&#x5982;&#x8BF7;&#x6C42;&#x4E2D;&#x6709;&#x9519;&#x8BEF;&#x7684;&#x8BED;&#x6CD5;&#x6216;&#x4E0D;&#x80FD;&#x5B8C;&#x6210;
<ul>
<li>400 Bad Request: &#x5BA2;&#x6237;&#x7AEF;&#x8BF7;&#x6C42;&#x7684;&#x8BED;&#x6CD5;&#x9519;&#x8BEF;&#xFF0C;&#x670D;&#x52A1;&#x5668;&#x65E0;&#x6CD5;&#x7406;&#x89E3;</li>
<li>401 Unauthorized: &#x8BF7;&#x6C42;&#x8981;&#x6C42;&#x7528;&#x6237;&#x7684;&#x8EAB;&#x4EFD;&#x8BA4;&#x8BC1;</li>
<li>403 Forbidden: &#x670D;&#x52A1;&#x5668;&#x7406;&#x89E3;&#x8BF7;&#x6C42;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x8BF7;&#x6C42;&#xFF0C;&#x4F46;&#x662F;&#x62D2;&#x7EDD;&#x6267;&#x884C;&#x6B64;&#x8BF7;&#x6C42;&#xFF08;&#x6743;&#x9650;&#x4E0D;&#x591F;&#xFF09;</li>
<li>404 Not Found: &#x670D;&#x52A1;&#x5668;&#x65E0;&#x6CD5;&#x6839;&#x636E;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x8BF7;&#x6C42;&#x627E;&#x5230;&#x8D44;&#x6E90;&#xFF08;&#x7F51;&#x9875;&#xFF09;&#x3002;&#x901A;&#x8FC7;&#x6B64;&#x4EE3;&#x7801;&#xFF0C;&#x7F51;&#x7AD9;&#x8BBE;&#x8BA1;&#x4EBA;&#x5458;&#x53EF;&#x8BBE;&#x7F6E; &#x201C;&#x60A8;&#x6240;&#x8BF7;&#x6C42;&#x7684;&#x8D44;&#x6E90;&#x65E0;&#x6CD5;&#x627E;&#x5230;&#x201D; &#x7684;&#x4E2A;&#x6027;&#x9875;&#x9762;</li>
<li>408 Request Timeout: &#x670D;&#x52A1;&#x5668;&#x7B49;&#x5F85;&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x9001;&#x7684;&#x8BF7;&#x6C42;&#x65F6;&#x95F4;&#x8FC7;&#x957F;&#xFF0C;&#x8D85;&#x65F6;</li>
</ul>
</li>
<li>5xx&#xFF1A;&#x8868;&#x793A;&#x670D;&#x52A1;&#x5668;&#x7684;&#x5DEE;&#x9519;&#xFF0C;&#x5982;&#x670D;&#x52A1;&#x5668;&#x5931;&#x6548;&#x65E0;&#x6CD5;&#x5B8C;&#x6210;&#x8BF7;&#x6C42;
<ul>
<li>500 Internal Server Error: &#x670D;&#x52A1;&#x5668;&#x5185;&#x90E8;&#x9519;&#x8BEF;&#xFF0C;&#x65E0;&#x6CD5;&#x5B8C;&#x6210;&#x8BF7;&#x6C42;</li>
<li>503 Service Unavailable: &#x7531;&#x4E8E;&#x8D85;&#x8F7D;&#x6216;&#x7CFB;&#x7EDF;&#x7EF4;&#x62A4;&#xFF0C;&#x670D;&#x52A1;&#x5668;&#x6682;&#x65F6;&#x7684;&#x65E0;&#x6CD5;&#x5904;&#x7406;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x8BF7;&#x6C42;&#x3002;&#x5EF6;&#x65F6;&#x7684;&#x957F;&#x5EA6;&#x53EF;&#x5305;&#x542B;&#x5728;&#x670D;&#x52A1;&#x5668;&#x7684; Retry-After &#x5934;&#x4FE1;&#x606F;&#x4E2D;</li>
<li>504 Gateway Timeout: &#x5145;&#x5F53;&#x7F51;&#x5173;&#x6216;&#x4EE3;&#x7406;&#x7684;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x672A;&#x53CA;&#x65F6;&#x4ECE;&#x8FDC;&#x7AEF;&#x670D;&#x52A1;&#x5668;&#x83B7;&#x53D6;&#x8BF7;&#x6C42;</li>
</ul>
</li>
</ul>
<blockquote>
<p>&#x66F4;&#x591A;&#x72B6;&#x6001;&#x7801;&#xFF1A;<a href="http://www.runoob.com/http/http-status-codes.html">&#x83DC;&#x9E1F;&#x6559;&#x7A0B; . HTTP&#x72B6;&#x6001;&#x7801;</a></p>
</blockquote>
<h5 class="mume-header" id="%E5%85%B6%E4%BB%96%E5%8D%8F%E8%AE%AE">&#x5176;&#x4ED6;&#x534F;&#x8BAE;</h5>

<ul>
<li>SMTP&#xFF08;Simple Main Transfer Protocol&#xFF0C;&#x7B80;&#x5355;&#x90AE;&#x4EF6;&#x4F20;&#x8F93;&#x534F;&#x8BAE;&#xFF09;&#x662F;&#x5728; Internet &#x4F20;&#x8F93; Email &#x7684;&#x6807;&#x51C6;&#xFF0C;&#x662F;&#x4E00;&#x4E2A;&#x76F8;&#x5BF9;&#x7B80;&#x5355;&#x7684;&#x57FA;&#x4E8E;&#x6587;&#x672C;&#x7684;&#x534F;&#x8BAE;&#x3002;&#x5728;&#x5176;&#x4E4B;&#x4E0A;&#x6307;&#x5B9A;&#x4E86;&#x4E00;&#x6761;&#x6D88;&#x606F;&#x7684;&#x4E00;&#x4E2A;&#x6216;&#x591A;&#x4E2A;&#x63A5;&#x6536;&#x8005;&#xFF08;&#x5728;&#x5927;&#x591A;&#x6570;&#x60C5;&#x51B5;&#x4E0B;&#x88AB;&#x786E;&#x8BA4;&#x662F;&#x5B58;&#x5728;&#x7684;&#xFF09;&#xFF0C;&#x7136;&#x540E;&#x6D88;&#x606F;&#x6587;&#x672C;&#x4F1A;&#x88AB;&#x4F20;&#x8F93;&#x3002;&#x53EF;&#x4EE5;&#x5F88;&#x7B80;&#x5355;&#x5730;&#x901A;&#x8FC7; Telnet &#x7A0B;&#x5E8F;&#x6765;&#x6D4B;&#x8BD5;&#x4E00;&#x4E2A; SMTP &#x670D;&#x52A1;&#x5668;&#x3002;SMTP &#x4F7F;&#x7528; TCP &#x7AEF;&#x53E3; 25&#x3002;</li>
<li>DHCP&#xFF08;Dynamic Host Configuration Protocol&#xFF0C;&#x52A8;&#x6001;&#x4E3B;&#x673A;&#x8BBE;&#x7F6E;&#x534F;&#x8BAE;&#xFF09;&#x662F;&#x4E00;&#x4E2A;&#x5C40;&#x57DF;&#x7F51;&#x7684;&#x7F51;&#x7EDC;&#x534F;&#x8BAE;&#xFF0C;&#x4F7F;&#x7528; UDP &#x534F;&#x8BAE;&#x5DE5;&#x4F5C;&#xFF0C;&#x4E3B;&#x8981;&#x6709;&#x4E24;&#x4E2A;&#x7528;&#x9014;&#xFF1A;
<ul>
<li>&#x7528;&#x4E8E;&#x5185;&#x90E8;&#x7F51;&#x7EDC;&#x6216;&#x7F51;&#x7EDC;&#x670D;&#x52A1;&#x4F9B;&#x5E94;&#x5546;&#x81EA;&#x52A8;&#x5206;&#x914D; IP &#x5730;&#x5740;&#x7ED9;&#x7528;&#x6237;</li>
<li>&#x7528;&#x4E8E;&#x5185;&#x90E8;&#x7F51;&#x7EDC;&#x7BA1;&#x7406;&#x5458;&#x4F5C;&#x4E3A;&#x5BF9;&#x6240;&#x6709;&#x7535;&#x8111;&#x4F5C;&#x4E2D;&#x592E;&#x7BA1;&#x7406;&#x7684;&#x624B;&#x6BB5;</li>
</ul>
</li>
<li>SNMP&#xFF08;Simple Network Management Protocol&#xFF0C;&#x7B80;&#x5355;&#x7F51;&#x7EDC;&#x7BA1;&#x7406;&#x534F;&#x8BAE;&#xFF09;&#x6784;&#x6210;&#x4E86;&#x4E92;&#x8054;&#x7F51;&#x5DE5;&#x7A0B;&#x5DE5;&#x4F5C;&#x5C0F;&#x7EC4;&#xFF08;IETF&#xFF0C;Internet Engineering Task Force&#xFF09;&#x5B9A;&#x4E49;&#x7684; Internet &#x534F;&#x8BAE;&#x65CF;&#x7684;&#x4E00;&#x90E8;&#x5206;&#x3002;&#x8BE5;&#x534F;&#x8BAE;&#x80FD;&#x591F;&#x652F;&#x6301;&#x7F51;&#x7EDC;&#x7BA1;&#x7406;&#x7CFB;&#x7EDF;&#xFF0C;&#x7528;&#x4EE5;&#x76D1;&#x6D4B;&#x8FDE;&#x63A5;&#x5230;&#x7F51;&#x7EDC;&#x4E0A;&#x7684;&#x8BBE;&#x5907;&#x662F;&#x5426;&#x6709;&#x4EFB;&#x4F55;&#x5F15;&#x8D77;&#x7BA1;&#x7406;&#x4E0A;&#x5173;&#x6CE8;&#x7684;&#x60C5;&#x51B5;&#x3002;</li>
</ul>
<p><a id="network-programming" href></a></p>
<h2 class="mume-header" id="%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B">&#x1F329; &#x7F51;&#x7EDC;&#x7F16;&#x7A0B;</h2>

<h3 class="mume-header" id="socket">Socket</h3>

<blockquote>
<p><a href="https://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html">Linux Socket &#x7F16;&#x7A0B;&#xFF08;&#x4E0D;&#x9650; Linux&#xFF09;</a></p>
</blockquote>
<p><img src="https://gitee.com/huihut/interview/raw/master/images/socket%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%80%9A%E8%AE%AF.jpg" alt="Socket &#x5BA2;&#x6237;&#x7AEF;&#x670D;&#x52A1;&#x5668;&#x901A;&#x8BAF;"></p>
<h4 class="mume-header" id="socket-%E4%B8%AD%E7%9A%84-read-write-%E5%87%BD%E6%95%B0">Socket &#x4E2D;&#x7684; read()&#x3001;write() &#x51FD;&#x6570;</h4>

<pre data-role="codeBlock" data-info="cpp" class="language-cpp">ssize_t <span class="token function">read</span><span class="token punctuation">(</span><span class="token keyword">int</span> fd<span class="token punctuation">,</span> <span class="token keyword">void</span> <span class="token operator">*</span>buf<span class="token punctuation">,</span> size_t count<span class="token punctuation">)</span><span class="token punctuation">;</span>
ssize_t <span class="token function">write</span><span class="token punctuation">(</span><span class="token keyword">int</span> fd<span class="token punctuation">,</span> <span class="token keyword">const</span> <span class="token keyword">void</span> <span class="token operator">*</span>buf<span class="token punctuation">,</span> size_t count<span class="token punctuation">)</span><span class="token punctuation">;</span>
</pre><h5 class="mume-header" id="read">read()</h5>

<ul>
<li>read &#x51FD;&#x6570;&#x662F;&#x8D1F;&#x8D23;&#x4ECE; fd &#x4E2D;&#x8BFB;&#x53D6;&#x5185;&#x5BB9;&#x3002;</li>
<li>&#x5F53;&#x8BFB;&#x6210;&#x529F;&#x65F6;&#xFF0C;read &#x8FD4;&#x56DE;&#x5B9E;&#x9645;&#x6240;&#x8BFB;&#x7684;&#x5B57;&#x8282;&#x6570;&#x3002;</li>
<li>&#x5982;&#x679C;&#x8FD4;&#x56DE;&#x7684;&#x503C;&#x662F; 0 &#x8868;&#x793A;&#x5DF2;&#x7ECF;&#x8BFB;&#x5230;&#x6587;&#x4EF6;&#x7684;&#x7ED3;&#x675F;&#x4E86;&#xFF0C;&#x5C0F;&#x4E8E; 0 &#x8868;&#x793A;&#x51FA;&#x73B0;&#x4E86;&#x9519;&#x8BEF;&#x3002;</li>
<li>&#x5982;&#x679C;&#x9519;&#x8BEF;&#x4E3A; EINTR &#x8BF4;&#x660E;&#x8BFB;&#x662F;&#x7531;&#x4E2D;&#x65AD;&#x5F15;&#x8D77;&#x7684;&#xFF1B;&#x5982;&#x679C;&#x662F; ECONNREST &#x8868;&#x793A;&#x7F51;&#x7EDC;&#x8FDE;&#x63A5;&#x51FA;&#x4E86;&#x95EE;&#x9898;&#x3002;</li>
</ul>
<h5 class="mume-header" id="write">write()</h5>

<ul>
<li>write &#x51FD;&#x6570;&#x5C06; buf &#x4E2D;&#x7684; nbytes &#x5B57;&#x8282;&#x5185;&#x5BB9;&#x5199;&#x5165;&#x6587;&#x4EF6;&#x63CF;&#x8FF0;&#x7B26; fd&#x3002;</li>
<li>&#x6210;&#x529F;&#x65F6;&#x8FD4;&#x56DE;&#x5199;&#x7684;&#x5B57;&#x8282;&#x6570;&#x3002;&#x5931;&#x8D25;&#x65F6;&#x8FD4;&#x56DE; -1&#xFF0C;&#x5E76;&#x8BBE;&#x7F6E; errno &#x53D8;&#x91CF;&#x3002;</li>
<li>&#x5728;&#x7F51;&#x7EDC;&#x7A0B;&#x5E8F;&#x4E2D;&#xFF0C;&#x5F53;&#x6211;&#x4EEC;&#x5411;&#x5957;&#x63A5;&#x5B57;&#x6587;&#x4EF6;&#x63CF;&#x8FF0;&#x7B26;&#x5199;&#x65F6;&#x6709;&#x4FE9;&#x79CD;&#x53EF;&#x80FD;&#x3002;</li>
<li>&#xFF08;1&#xFF09;write &#x7684;&#x8FD4;&#x56DE;&#x503C;&#x5927;&#x4E8E; 0&#xFF0C;&#x8868;&#x793A;&#x5199;&#x4E86;&#x90E8;&#x5206;&#x6216;&#x8005;&#x662F;&#x5168;&#x90E8;&#x7684;&#x6570;&#x636E;&#x3002;</li>
<li>&#xFF08;2&#xFF09;&#x8FD4;&#x56DE;&#x7684;&#x503C;&#x5C0F;&#x4E8E; 0&#xFF0C;&#x6B64;&#x65F6;&#x51FA;&#x73B0;&#x4E86;&#x9519;&#x8BEF;&#x3002;</li>
<li>&#x5982;&#x679C;&#x9519;&#x8BEF;&#x4E3A; EINTR &#x8868;&#x793A;&#x5728;&#x5199;&#x7684;&#x65F6;&#x5019;&#x51FA;&#x73B0;&#x4E86;&#x4E2D;&#x65AD;&#x9519;&#x8BEF;&#xFF1B;&#x5982;&#x679C;&#x4E3A; EPIPE &#x8868;&#x793A;&#x7F51;&#x7EDC;&#x8FDE;&#x63A5;&#x51FA;&#x73B0;&#x4E86;&#x95EE;&#x9898;&#xFF08;&#x5BF9;&#x65B9;&#x5DF2;&#x7ECF;&#x5173;&#x95ED;&#x4E86;&#x8FDE;&#x63A5;&#xFF09;&#x3002;</li>
</ul>
<h4 class="mume-header" id="socket-%E4%B8%AD-tcp-%E7%9A%84%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B%E5%BB%BA%E7%AB%8B%E8%BF%9E%E6%8E%A5">Socket &#x4E2D; TCP &#x7684;&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;</h4>

<p>&#x6211;&#x4EEC;&#x77E5;&#x9053; TCP &#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#x8981;&#x8FDB;&#x884C; &#x201C;&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x201D;&#xFF0C;&#x5373;&#x4EA4;&#x6362;&#x4E09;&#x4E2A;&#x5206;&#x7EC4;&#x3002;&#x5927;&#x81F4;&#x6D41;&#x7A0B;&#x5982;&#x4E0B;&#xFF1A;</p>
<ol>
<li>&#x5BA2;&#x6237;&#x7AEF;&#x5411;&#x670D;&#x52A1;&#x5668;&#x53D1;&#x9001;&#x4E00;&#x4E2A; SYN J</li>
<li>&#x670D;&#x52A1;&#x5668;&#x5411;&#x5BA2;&#x6237;&#x7AEF;&#x54CD;&#x5E94;&#x4E00;&#x4E2A; SYN K&#xFF0C;&#x5E76;&#x5BF9; SYN J &#x8FDB;&#x884C;&#x786E;&#x8BA4; ACK J+1</li>
<li>&#x5BA2;&#x6237;&#x7AEF;&#x518D;&#x60F3;&#x670D;&#x52A1;&#x5668;&#x53D1;&#x4E00;&#x4E2A;&#x786E;&#x8BA4; ACK K+1</li>
</ol>
<p>&#x53EA;&#x6709;&#x5C31;&#x5B8C;&#x4E86;&#x4E09;&#x6B21;&#x63E1;&#x624B;&#xFF0C;&#x4F46;&#x662F;&#x8FD9;&#x4E2A;&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x53D1;&#x751F;&#x5728; Socket &#x7684;&#x90A3;&#x51E0;&#x4E2A;&#x51FD;&#x6570;&#x4E2D;&#x5462;&#xFF1F;&#x8BF7;&#x770B;&#x4E0B;&#x56FE;&#xFF1A;</p>
<p><img src="http://images.cnblogs.com/cnblogs_com/skynet/201012/201012122157467258.png" alt="socket &#x4E2D;&#x53D1;&#x9001;&#x7684; TCP &#x4E09;&#x6B21;&#x63E1;&#x624B;"></p>
<p>&#x4ECE;&#x56FE;&#x4E2D;&#x53EF;&#x4EE5;&#x770B;&#x51FA;&#xFF1A;</p>
<ol>
<li>&#x5F53;&#x5BA2;&#x6237;&#x7AEF;&#x8C03;&#x7528; connect &#x65F6;&#xFF0C;&#x89E6;&#x53D1;&#x4E86;&#x8FDE;&#x63A5;&#x8BF7;&#x6C42;&#xFF0C;&#x5411;&#x670D;&#x52A1;&#x5668;&#x53D1;&#x9001;&#x4E86; SYN J &#x5305;&#xFF0C;&#x8FD9;&#x65F6; connect &#x8FDB;&#x5165;&#x963B;&#x585E;&#x72B6;&#x6001;&#xFF1B;</li>
<li>&#x670D;&#x52A1;&#x5668;&#x76D1;&#x542C;&#x5230;&#x8FDE;&#x63A5;&#x8BF7;&#x6C42;&#xFF0C;&#x5373;&#x6536;&#x5230; SYN J &#x5305;&#xFF0C;&#x8C03;&#x7528; accept &#x51FD;&#x6570;&#x63A5;&#x6536;&#x8BF7;&#x6C42;&#x5411;&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x9001; SYN K &#xFF0C;ACK J+1&#xFF0C;&#x8FD9;&#x65F6; accept &#x8FDB;&#x5165;&#x963B;&#x585E;&#x72B6;&#x6001;&#xFF1B;</li>
<li>&#x5BA2;&#x6237;&#x7AEF;&#x6536;&#x5230;&#x670D;&#x52A1;&#x5668;&#x7684; SYN K &#xFF0C;ACK J+1 &#x4E4B;&#x540E;&#xFF0C;&#x8FD9;&#x65F6; connect &#x8FD4;&#x56DE;&#xFF0C;&#x5E76;&#x5BF9; SYN K &#x8FDB;&#x884C;&#x786E;&#x8BA4;&#xFF1B;</li>
<li>&#x670D;&#x52A1;&#x5668;&#x6536;&#x5230; ACK K+1 &#x65F6;&#xFF0C;accept &#x8FD4;&#x56DE;&#xFF0C;&#x81F3;&#x6B64;&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x5B8C;&#x6BD5;&#xFF0C;&#x8FDE;&#x63A5;&#x5EFA;&#x7ACB;&#x3002;</li>
</ol>
<h4 class="mume-header" id="socket-%E4%B8%AD-tcp-%E7%9A%84%E5%9B%9B%E6%AC%A1%E6%8F%A1%E6%89%8B%E9%87%8A%E6%94%BE%E8%BF%9E%E6%8E%A5">Socket &#x4E2D; TCP &#x7684;&#x56DB;&#x6B21;&#x63E1;&#x624B;&#x91CA;&#x653E;&#x8FDE;&#x63A5;</h4>

<p>&#x4E0A;&#x9762;&#x4ECB;&#x7ECD;&#x4E86; socket &#x4E2D; TCP &#x7684;&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x5EFA;&#x7ACB;&#x8FC7;&#x7A0B;&#xFF0C;&#x53CA;&#x5176;&#x6D89;&#x53CA;&#x7684; socket &#x51FD;&#x6570;&#x3002;&#x73B0;&#x5728;&#x6211;&#x4EEC;&#x4ECB;&#x7ECD; socket &#x4E2D;&#x7684;&#x56DB;&#x6B21;&#x63E1;&#x624B;&#x91CA;&#x653E;&#x8FDE;&#x63A5;&#x7684;&#x8FC7;&#x7A0B;&#xFF0C;&#x8BF7;&#x770B;&#x4E0B;&#x56FE;&#xFF1A;</p>
<p><img src="http://images.cnblogs.com/cnblogs_com/skynet/201012/201012122157487616.png" alt="socket &#x4E2D;&#x53D1;&#x9001;&#x7684; TCP &#x56DB;&#x6B21;&#x63E1;&#x624B;"></p>
<p>&#x56FE;&#x793A;&#x8FC7;&#x7A0B;&#x5982;&#x4E0B;&#xFF1A;</p>
<ol>
<li>&#x67D0;&#x4E2A;&#x5E94;&#x7528;&#x8FDB;&#x7A0B;&#x9996;&#x5148;&#x8C03;&#x7528; close &#x4E3B;&#x52A8;&#x5173;&#x95ED;&#x8FDE;&#x63A5;&#xFF0C;&#x8FD9;&#x65F6; TCP &#x53D1;&#x9001;&#x4E00;&#x4E2A; FIN M&#xFF1B;</li>
<li>&#x53E6;&#x4E00;&#x7AEF;&#x63A5;&#x6536;&#x5230; FIN M &#x4E4B;&#x540E;&#xFF0C;&#x6267;&#x884C;&#x88AB;&#x52A8;&#x5173;&#x95ED;&#xFF0C;&#x5BF9;&#x8FD9;&#x4E2A; FIN &#x8FDB;&#x884C;&#x786E;&#x8BA4;&#x3002;&#x5B83;&#x7684;&#x63A5;&#x6536;&#x4E5F;&#x4F5C;&#x4E3A;&#x6587;&#x4EF6;&#x7ED3;&#x675F;&#x7B26;&#x4F20;&#x9012;&#x7ED9;&#x5E94;&#x7528;&#x8FDB;&#x7A0B;&#xFF0C;&#x56E0;&#x4E3A; FIN &#x7684;&#x63A5;&#x6536;&#x610F;&#x5473;&#x7740;&#x5E94;&#x7528;&#x8FDB;&#x7A0B;&#x5728;&#x76F8;&#x5E94;&#x7684;&#x8FDE;&#x63A5;&#x4E0A;&#x518D;&#x4E5F;&#x63A5;&#x6536;&#x4E0D;&#x5230;&#x989D;&#x5916;&#x6570;&#x636E;&#xFF1B;</li>
<li>&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x4E4B;&#x540E;&#xFF0C;&#x63A5;&#x6536;&#x5230;&#x6587;&#x4EF6;&#x7ED3;&#x675F;&#x7B26;&#x7684;&#x5E94;&#x7528;&#x8FDB;&#x7A0B;&#x8C03;&#x7528; close &#x5173;&#x95ED;&#x5B83;&#x7684; socket&#x3002;&#x8FD9;&#x5BFC;&#x81F4;&#x5B83;&#x7684; TCP &#x4E5F;&#x53D1;&#x9001;&#x4E00;&#x4E2A; FIN N&#xFF1B;</li>
<li>&#x63A5;&#x6536;&#x5230;&#x8FD9;&#x4E2A; FIN &#x7684;&#x6E90;&#x53D1;&#x9001;&#x7AEF; TCP &#x5BF9;&#x5B83;&#x8FDB;&#x884C;&#x786E;&#x8BA4;&#x3002;</li>
</ol>
<p>&#x8FD9;&#x6837;&#x6BCF;&#x4E2A;&#x65B9;&#x5411;&#x4E0A;&#x90FD;&#x6709;&#x4E00;&#x4E2A; FIN &#x548C; ACK&#x3002;</p>
<p><a id="database" href></a></p>
<h2 class="mume-header" id="%E6%95%B0%E6%8D%AE%E5%BA%93">&#x1F4BE; &#x6570;&#x636E;&#x5E93;</h2>

<blockquote>
<p>&#x672C;&#x8282;&#x90E8;&#x5206;&#x77E5;&#x8BC6;&#x70B9;&#x6765;&#x81EA;&#x300A;&#x6570;&#x636E;&#x5E93;&#x7CFB;&#x7EDF;&#x6982;&#x8BBA;&#xFF08;&#x7B2C; 5 &#x7248;&#xFF09;&#x300B;</p>
</blockquote>
<h3 class="mume-header" id="%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5">&#x57FA;&#x672C;&#x6982;&#x5FF5;</h3>

<ul>
<li>&#x6570;&#x636E;&#xFF08;data&#xFF09;&#xFF1A;&#x63CF;&#x8FF0;&#x4E8B;&#x7269;&#x7684;&#x7B26;&#x53F7;&#x8BB0;&#x5F55;&#x79F0;&#x4E3A;&#x6570;&#x636E;&#x3002;</li>
<li>&#x6570;&#x636E;&#x5E93;&#xFF08;DataBase&#xFF0C;DB&#xFF09;&#xFF1A;&#x662F;&#x957F;&#x671F;&#x5B58;&#x50A8;&#x5728;&#x8BA1;&#x7B97;&#x673A;&#x5185;&#x3001;&#x6709;&#x7EC4;&#x7EC7;&#x7684;&#x3001;&#x53EF;&#x5171;&#x4EAB;&#x7684;&#x5927;&#x91CF;&#x6570;&#x636E;&#x7684;&#x96C6;&#x5408;&#xFF0C;&#x5177;&#x6709;&#x6C38;&#x4E45;&#x5B58;&#x50A8;&#x3001;&#x6709;&#x7EC4;&#x7EC7;&#x3001;&#x53EF;&#x5171;&#x4EAB;&#x4E09;&#x4E2A;&#x57FA;&#x672C;&#x7279;&#x70B9;&#x3002;</li>
<li>&#x6570;&#x636E;&#x5E93;&#x7BA1;&#x7406;&#x7CFB;&#x7EDF;&#xFF08;DataBase Management System&#xFF0C;DBMS&#xFF09;&#xFF1A;&#x662F;&#x4F4D;&#x4E8E;&#x7528;&#x6237;&#x4E0E;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x4E4B;&#x95F4;&#x7684;&#x4E00;&#x5C42;&#x6570;&#x636E;&#x7BA1;&#x7406;&#x8F6F;&#x4EF6;&#x3002;</li>
<li>&#x6570;&#x636E;&#x5E93;&#x7CFB;&#x7EDF;&#xFF08;DataBase System&#xFF0C;DBS&#xFF09;&#xFF1A;&#x662F;&#x6709;&#x6570;&#x636E;&#x5E93;&#x3001;&#x6570;&#x636E;&#x5E93;&#x7BA1;&#x7406;&#x7CFB;&#x7EDF;&#xFF08;&#x53CA;&#x5176;&#x5E94;&#x7528;&#x5F00;&#x53D1;&#x5DE5;&#x5177;&#xFF09;&#x3001;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x548C;&#x6570;&#x636E;&#x5E93;&#x7BA1;&#x7406;&#x5458;&#xFF08;DataBase Administrator DBA&#xFF09;&#x7EC4;&#x6210;&#x7684;&#x5B58;&#x50A8;&#x3001;&#x7BA1;&#x7406;&#x3001;&#x5904;&#x7406;&#x548C;&#x7EF4;&#x62A4;&#x6570;&#x636E;&#x7684;&#x7CFB;&#x7EDF;&#x3002;</li>
<li>&#x5B9E;&#x4F53;&#xFF08;entity&#xFF09;&#xFF1A;&#x5BA2;&#x89C2;&#x5B58;&#x5728;&#x5E76;&#x53EF;&#x76F8;&#x4E92;&#x533A;&#x522B;&#x7684;&#x4E8B;&#x7269;&#x79F0;&#x4E3A;&#x5B9E;&#x4F53;&#x3002;</li>
<li>&#x5C5E;&#x6027;&#xFF08;attribute&#xFF09;&#xFF1A;&#x5B9E;&#x4F53;&#x6240;&#x5177;&#x6709;&#x7684;&#x67D0;&#x4E00;&#x7279;&#x6027;&#x79F0;&#x4E3A;&#x5C5E;&#x6027;&#x3002;</li>
<li>&#x7801;&#xFF08;key&#xFF09;&#xFF1A;&#x552F;&#x4E00;&#x6807;&#x8BC6;&#x5B9E;&#x4F53;&#x7684;&#x5C5E;&#x6027;&#x96C6;&#x79F0;&#x4E3A;&#x7801;&#x3002;</li>
<li>&#x5B9E;&#x4F53;&#x578B;&#xFF08;entity type&#xFF09;&#xFF1A;&#x7528;&#x5B9E;&#x4F53;&#x540D;&#x53CA;&#x5176;&#x5C5E;&#x6027;&#x540D;&#x96C6;&#x5408;&#x6765;&#x62BD;&#x8C61;&#x548C;&#x523B;&#x753B;&#x540C;&#x7C7B;&#x5B9E;&#x4F53;&#xFF0C;&#x79F0;&#x4E3A;&#x5B9E;&#x4F53;&#x578B;&#x3002;</li>
<li>&#x5B9E;&#x4F53;&#x96C6;&#xFF08;entity set&#xFF09;&#xFF1A;&#x540C;&#x4E00;&#x5B9E;&#x4F53;&#x578B;&#x7684;&#x96C6;&#x5408;&#x79F0;&#x4E3A;&#x5B9E;&#x4F53;&#x96C6;&#x3002;</li>
<li>&#x8054;&#x7CFB;&#xFF08;relationship&#xFF09;&#xFF1A;&#x5B9E;&#x4F53;&#x4E4B;&#x95F4;&#x7684;&#x8054;&#x7CFB;&#x901A;&#x5E38;&#x662F;&#x6307;&#x4E0D;&#x540C;&#x5B9E;&#x4F53;&#x96C6;&#x4E4B;&#x95F4;&#x7684;&#x8054;&#x7CFB;&#x3002;</li>
<li>&#x6A21;&#x5F0F;&#xFF08;schema&#xFF09;&#xFF1A;&#x6A21;&#x5F0F;&#x4E5F;&#x79F0;&#x903B;&#x8F91;&#x6A21;&#x5F0F;&#xFF0C;&#x662F;&#x6570;&#x636E;&#x5E93;&#x5168;&#x4F53;&#x6570;&#x636E;&#x7684;&#x903B;&#x8F91;&#x7ED3;&#x6784;&#x548C;&#x7279;&#x5F81;&#x7684;&#x63CF;&#x8FF0;&#xFF0C;&#x662F;&#x6240;&#x6709;&#x7528;&#x6237;&#x7684;&#x516C;&#x5171;&#x6570;&#x636E;&#x89C6;&#x56FE;&#x3002;</li>
<li>&#x5916;&#x6A21;&#x5F0F;&#xFF08;external schema&#xFF09;&#xFF1A;&#x5916;&#x6A21;&#x5F0F;&#x4E5F;&#x79F0;&#x5B50;&#x6A21;&#x5F0F;&#xFF08;subschema&#xFF09;&#x6216;&#x7528;&#x6237;&#x6A21;&#x5F0F;&#xFF0C;&#x5B83;&#x662F;&#x6570;&#x636E;&#x5E93;&#x7528;&#x6237;&#xFF08;&#x5305;&#x62EC;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x5458;&#x548C;&#x6700;&#x7EC8;&#x7528;&#x6237;&#xFF09;&#x80FD;&#x591F;&#x770B;&#x89C1;&#x548C;&#x4F7F;&#x7528;&#x7684;&#x5C40;&#x90E8;&#x6570;&#x636E;&#x7684;&#x903B;&#x8F91;&#x7ED3;&#x6784;&#x548C;&#x7279;&#x5F81;&#x7684;&#x63CF;&#x8FF0;&#xFF0C;&#x662F;&#x6570;&#x636E;&#x5E93;&#x7528;&#x6237;&#x7684;&#x6570;&#x636E;&#x89C6;&#x56FE;&#xFF0C;&#x662F;&#x4E0E;&#x67D0;&#x4E00;&#x5E94;&#x7528;&#x6709;&#x5173;&#x7684;&#x6570;&#x636E;&#x7684;&#x903B;&#x8F91;&#x8868;&#x793A;&#x3002;</li>
<li>&#x5185;&#x6A21;&#x5F0F;&#xFF08;internal schema&#xFF09;&#xFF1A;&#x5185;&#x6A21;&#x5F0F;&#x4E5F;&#x79F0;&#x4E3A;&#x5B58;&#x50A8;&#x6A21;&#x5F0F;&#xFF08;storage schema&#xFF09;&#xFF0C;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x5E93;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x5185;&#x6A21;&#x5F0F;&#x3002;&#x4ED6;&#x662F;&#x6570;&#x636E;&#x7269;&#x7406;&#x7ED3;&#x6784;&#x548C;&#x5B58;&#x50A8;&#x65B9;&#x5F0F;&#x7684;&#x63CF;&#x8FF0;&#xFF0C;&#x662F;&#x6570;&#x636E;&#x5E93;&#x5728;&#x6570;&#x636E;&#x5E93;&#x5185;&#x90E8;&#x7684;&#x7EC4;&#x7EC7;&#x65B9;&#x5F0F;&#x3002;</li>
</ul>
<h3 class="mume-header" id="%E5%B8%B8%E7%94%A8%E6%95%B0%E6%8D%AE%E6%A8%A1%E5%9E%8B">&#x5E38;&#x7528;&#x6570;&#x636E;&#x6A21;&#x578B;</h3>

<ul>
<li>&#x5C42;&#x6B21;&#x6A21;&#x578B;&#xFF08;hierarchical model&#xFF09;</li>
<li>&#x7F51;&#x72B6;&#x6A21;&#x578B;&#xFF08;network model&#xFF09;</li>
<li>&#x5173;&#x7CFB;&#x6A21;&#x578B;&#xFF08;relational model&#xFF09;
<ul>
<li>&#x5173;&#x7CFB;&#xFF08;relation&#xFF09;&#xFF1A;&#x4E00;&#x4E2A;&#x5173;&#x7CFB;&#x5BF9;&#x5E94;&#x901A;&#x5E38;&#x8BF4;&#x7684;&#x4E00;&#x5F20;&#x8868;</li>
<li>&#x5143;&#x7EC4;&#xFF08;tuple&#xFF09;&#xFF1A;&#x8868;&#x4E2D;&#x7684;&#x4E00;&#x884C;&#x5373;&#x4E3A;&#x4E00;&#x4E2A;&#x5143;&#x7EC4;</li>
<li>&#x5C5E;&#x6027;&#xFF08;attribute&#xFF09;&#xFF1A;&#x8868;&#x4E2D;&#x7684;&#x4E00;&#x5217;&#x5373;&#x4E3A;&#x4E00;&#x4E2A;&#x5C5E;&#x6027;</li>
<li>&#x7801;&#xFF08;key&#xFF09;&#xFF1A;&#x8868;&#x4E2D;&#x53EF;&#x4EE5;&#x552F;&#x4E00;&#x786E;&#x5B9A;&#x4E00;&#x4E2A;&#x5143;&#x7EC4;&#x7684;&#x67D0;&#x4E2A;&#x5C5E;&#x6027;&#x7EC4;</li>
<li>&#x57DF;&#xFF08;domain&#xFF09;&#xFF1A;&#x4E00;&#x7EC4;&#x5177;&#x6709;&#x76F8;&#x540C;&#x6570;&#x636E;&#x7C7B;&#x578B;&#x7684;&#x503C;&#x7684;&#x96C6;&#x5408;</li>
<li>&#x5206;&#x91CF;&#xFF1A;&#x5143;&#x7EC4;&#x4E2D;&#x7684;&#x4E00;&#x4E2A;&#x5C5E;&#x6027;&#x503C;</li>
<li>&#x5173;&#x7CFB;&#x6A21;&#x5F0F;&#xFF1A;&#x5BF9;&#x5173;&#x7CFB;&#x7684;&#x63CF;&#x8FF0;&#xFF0C;&#x4E00;&#x822C;&#x8868;&#x793A;&#x4E3A; <code>&#x5173;&#x7CFB;&#x540D;(&#x5C5E;&#x6027;1, &#x5C5E;&#x6027;2, ..., &#x5C5E;&#x6027;n)</code></li>
</ul>
</li>
<li>&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x6570;&#x636E;&#x6A21;&#x578B;&#xFF08;object oriented data model&#xFF09;</li>
<li>&#x5BF9;&#x8C61;&#x5173;&#x7CFB;&#x6570;&#x636E;&#x6A21;&#x578B;&#xFF08;object relational data model&#xFF09;</li>
<li>&#x534A;&#x7ED3;&#x6784;&#x5316;&#x6570;&#x636E;&#x6A21;&#x578B;&#xFF08;semistructure data model&#xFF09;</li>
</ul>
<h3 class="mume-header" id="%E5%B8%B8%E7%94%A8-sql-%E6%93%8D%E4%BD%9C">&#x5E38;&#x7528; SQL &#x64CD;&#x4F5C;</h3>

<table>
  <tbody><tr>
    <th>&#x5BF9;&#x8C61;&#x7C7B;&#x578B;</th>
    <th>&#x5BF9;&#x8C61;</th>
    <th>&#x64CD;&#x4F5C;&#x7C7B;&#x578B;</th>
  </tr>
  <tr>
    <td rowspan="4">&#x6570;&#x636E;&#x5E93;&#x6A21;&#x5F0F;</td>
    <td>&#x6A21;&#x5F0F;</td>
    <td><code>CREATE SCHEMA</code></td>
  </tr>
  <tr>
    <td>&#x57FA;&#x672C;&#x8868;</td>
    <td><code>CREATE SCHEMA</code>&#xFF0C;<code>ALTER TABLE</code></td>
  </tr>
    <tr>
    <td>&#x89C6;&#x56FE;</td>
    <td><code>CREATE VIEW</code></td>
  </tr>
    <tr>
    <td>&#x7D22;&#x5F15;</td>
    <td><code>CREATE INDEX</code></td>
  </tr>
    <tr>
    <td rowspan="2">&#x6570;&#x636E;</td>
    <td>&#x57FA;&#x672C;&#x8868;&#x548C;&#x89C6;&#x56FE;</td>
    <td><code>SELECT</code>&#xFF0C;<code>INSERT</code>&#xFF0C;<code>UPDATE</code>&#xFF0C;<code>DELETE</code>&#xFF0C;<code>REFERENCES</code>&#xFF0C;<code>ALL PRIVILEGES</code></td>
  </tr>
    <tr>
    <td>&#x5C5E;&#x6027;&#x5217;</td>
    <td><code>SELECT</code>&#xFF0C;<code>INSERT</code>&#xFF0C;<code>UPDATE</code>&#xFF0C;<code>REFERENCES</code>&#xFF0C;<code>ALL PRIVILEGES</code></td>
  </tr>
</tbody></table>
<blockquote>
<p>SQL &#x8BED;&#x6CD5;&#x6559;&#x7A0B;&#xFF1A;<a href="http://www.runoob.com/sql/sql-tutorial.html">runoob . SQL &#x6559;&#x7A0B;</a></p>
</blockquote>
<h3 class="mume-header" id="%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93">&#x5173;&#x7CFB;&#x578B;&#x6570;&#x636E;&#x5E93;</h3>

<ul>
<li>&#x57FA;&#x672C;&#x5173;&#x7CFB;&#x64CD;&#x4F5C;&#xFF1A;&#x67E5;&#x8BE2;&#xFF08;&#x9009;&#x62E9;&#x3001;&#x6295;&#x5F71;&#x3001;&#x8FDE;&#x63A5;&#xFF08;&#x7B49;&#x503C;&#x8FDE;&#x63A5;&#x3001;&#x81EA;&#x7136;&#x8FDE;&#x63A5;&#x3001;&#x5916;&#x8FDE;&#x63A5;&#xFF08;&#x5DE6;&#x5916;&#x8FDE;&#x63A5;&#x3001;&#x53F3;&#x5916;&#x8FDE;&#x63A5;&#xFF09;&#xFF09;&#x3001;&#x9664;&#x3001;&#x5E76;&#x3001;&#x5DEE;&#x3001;&#x4EA4;&#x3001;&#x7B1B;&#x5361;&#x5C14;&#x79EF;&#x7B49;&#xFF09;&#x3001;&#x63D2;&#x5165;&#x3001;&#x5220;&#x9664;&#x3001;&#x4FEE;&#x6539;</li>
<li>&#x5173;&#x7CFB;&#x6A21;&#x578B;&#x4E2D;&#x7684;&#x4E09;&#x7C7B;&#x5B8C;&#x6574;&#x6027;&#x7EA6;&#x675F;&#xFF1A;&#x5B9E;&#x4F53;&#x5B8C;&#x6574;&#x6027;&#x3001;&#x53C2;&#x7167;&#x5B8C;&#x6574;&#x6027;&#x3001;&#x7528;&#x6237;&#x5B9A;&#x4E49;&#x7684;&#x5B8C;&#x6574;&#x6027;</li>
</ul>
<h4 class="mume-header" id="%E7%B4%A2%E5%BC%95">&#x7D22;&#x5F15;</h4>

<ul>
<li>&#x6570;&#x636E;&#x5E93;&#x7D22;&#x5F15;&#xFF1A;&#x987A;&#x5E8F;&#x7D22;&#x5F15;&#x3001;B+ &#x6811;&#x7D22;&#x5F15;&#x3001;hash &#x7D22;&#x5F15;</li>
<li><a href="http://blog.codinglabs.org/articles/theory-of-mysql-index.html">MySQL &#x7D22;&#x5F15;&#x80CC;&#x540E;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x53CA;&#x7B97;&#x6CD5;&#x539F;&#x7406;</a></li>
</ul>
<h3 class="mume-header" id="%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%8C%E6%95%B4%E6%80%A7">&#x6570;&#x636E;&#x5E93;&#x5B8C;&#x6574;&#x6027;</h3>

<ul>
<li>&#x6570;&#x636E;&#x5E93;&#x7684;&#x5B8C;&#x6574;&#x6027;&#x662F;&#x6307;&#x6570;&#x636E;&#x7684;&#x6B63;&#x786E;&#x6027;&#x548C;&#x76F8;&#x5BB9;&#x6027;&#x3002;
<ul>
<li>&#x5B8C;&#x6574;&#x6027;&#xFF1A;&#x4E3A;&#x4E86;&#x9632;&#x6B62;&#x6570;&#x636E;&#x5E93;&#x4E2D;&#x5B58;&#x5728;&#x4E0D;&#x7B26;&#x5408;&#x8BED;&#x4E49;&#xFF08;&#x4E0D;&#x6B63;&#x786E;&#xFF09;&#x7684;&#x6570;&#x636E;&#x3002;</li>
<li>&#x5B89;&#x5168;&#x6027;&#xFF1A;&#x4E3A;&#x4E86;&#x4FDD;&#x62A4;&#x6570;&#x636E;&#x5E93;&#x9632;&#x6B62;&#x6076;&#x610F;&#x7834;&#x574F;&#x548C;&#x975E;&#x6CD5;&#x5B58;&#x53D6;&#x3002;</li>
</ul>
</li>
<li>&#x89E6;&#x53D1;&#x5668;&#xFF1A;&#x662F;&#x7528;&#x6237;&#x5B9A;&#x4E49;&#x5728;&#x5173;&#x7CFB;&#x8868;&#x4E2D;&#x7684;&#x4E00;&#x7C7B;&#x7531;&#x4E8B;&#x4EF6;&#x9A71;&#x52A8;&#x7684;&#x7279;&#x6B8A;&#x8FC7;&#x7A0B;&#x3002;</li>
</ul>
<h3 class="mume-header" id="%E5%85%B3%E7%B3%BB%E6%95%B0%E6%8D%AE%E7%90%86%E8%AE%BA">&#x5173;&#x7CFB;&#x6570;&#x636E;&#x7406;&#x8BBA;</h3>

<ul>
<li>&#x6570;&#x636E;&#x4F9D;&#x8D56;&#x662F;&#x4E00;&#x4E2A;&#x5173;&#x7CFB;&#x5185;&#x90E8;&#x5C5E;&#x6027;&#x4E0E;&#x5C5E;&#x6027;&#x4E4B;&#x95F4;&#x7684;&#x4E00;&#x79CD;&#x7EA6;&#x675F;&#x5173;&#x7CFB;&#xFF0C;&#x662F;&#x901A;&#x8FC7;&#x5C5E;&#x6027;&#x95F4;&#x503C;&#x7684;&#x76F8;&#x7B49;&#x4E0E;&#x5426;&#x4F53;&#x73B0;&#x51FA;&#x6765;&#x7684;&#x6570;&#x636E;&#x95F4;&#x76F8;&#x5173;&#x8054;&#x7CFB;&#x3002;</li>
<li>&#x6700;&#x91CD;&#x8981;&#x7684;&#x6570;&#x636E;&#x4F9D;&#x8D56;&#xFF1A;&#x51FD;&#x6570;&#x4F9D;&#x8D56;&#x3001;&#x591A;&#x503C;&#x4F9D;&#x8D56;&#x3002;</li>
</ul>
<h4 class="mume-header" id="%E8%8C%83%E5%BC%8F">&#x8303;&#x5F0F;</h4>

<ul>
<li>&#x7B2C;&#x4E00;&#x8303;&#x5F0F;&#xFF08;1NF&#xFF09;&#xFF1A;&#x5C5E;&#x6027;&#xFF08;&#x5B57;&#x6BB5;&#xFF09;&#x662F;&#x6700;&#x5C0F;&#x5355;&#x4F4D;&#x4E0D;&#x53EF;&#x518D;&#x5206;&#x3002;</li>
<li>&#x7B2C;&#x4E8C;&#x8303;&#x5F0F;&#xFF08;2NF&#xFF09;&#xFF1A;&#x6EE1;&#x8DB3; 1NF&#xFF0C;&#x6BCF;&#x4E2A;&#x975E;&#x4E3B;&#x5C5E;&#x6027;&#x5B8C;&#x5168;&#x4F9D;&#x8D56;&#x4E8E;&#x4E3B;&#x952E;&#xFF08;&#x6D88;&#x9664; 1NF &#x975E;&#x4E3B;&#x5C5E;&#x6027;&#x5BF9;&#x7801;&#x7684;&#x90E8;&#x5206;&#x51FD;&#x6570;&#x4F9D;&#x8D56;&#xFF09;&#x3002;</li>
<li>&#x7B2C;&#x4E09;&#x8303;&#x5F0F;&#xFF08;3NF&#xFF09;&#xFF1A;&#x6EE1;&#x8DB3; 2NF&#xFF0C;&#x4EFB;&#x4F55;&#x975E;&#x4E3B;&#x5C5E;&#x6027;&#x4E0D;&#x4F9D;&#x8D56;&#x4E8E;&#x5176;&#x4ED6;&#x975E;&#x4E3B;&#x5C5E;&#x6027;&#xFF08;&#x6D88;&#x9664; 2NF &#x975E;&#x4E3B;&#x5C5E;&#x6027;&#x5BF9;&#x7801;&#x7684;&#x4F20;&#x9012;&#x51FD;&#x6570;&#x4F9D;&#x8D56;&#xFF09;&#x3002;</li>
<li>&#x9C8D;&#x4F9D;&#x65AF;-&#x79D1;&#x5F97;&#x8303;&#x5F0F;&#xFF08;BCNF&#xFF09;&#xFF1A;&#x6EE1;&#x8DB3; 3NF&#xFF0C;&#x4EFB;&#x4F55;&#x975E;&#x4E3B;&#x5C5E;&#x6027;&#x4E0D;&#x80FD;&#x5BF9;&#x4E3B;&#x952E;&#x5B50;&#x96C6;&#x4F9D;&#x8D56;&#xFF08;&#x6D88;&#x9664; 3NF &#x4E3B;&#x5C5E;&#x6027;&#x5BF9;&#x7801;&#x7684;&#x90E8;&#x5206;&#x548C;&#x4F20;&#x9012;&#x51FD;&#x6570;&#x4F9D;&#x8D56;&#xFF09;&#x3002;</li>
<li>&#x7B2C;&#x56DB;&#x8303;&#x5F0F;&#xFF08;4NF&#xFF09;&#xFF1A;&#x6EE1;&#x8DB3; 3NF&#xFF0C;&#x5C5E;&#x6027;&#x4E4B;&#x95F4;&#x4E0D;&#x80FD;&#x6709;&#x975E;&#x5E73;&#x51E1;&#x4E14;&#x975E;&#x51FD;&#x6570;&#x4F9D;&#x8D56;&#x7684;&#x591A;&#x503C;&#x4F9D;&#x8D56;&#xFF08;&#x6D88;&#x9664; 3NF &#x975E;&#x5E73;&#x51E1;&#x4E14;&#x975E;&#x51FD;&#x6570;&#x4F9D;&#x8D56;&#x7684;&#x591A;&#x503C;&#x4F9D;&#x8D56;&#xFF09;&#x3002;</li>
</ul>
<h3 class="mume-header" id="%E6%95%B0%E6%8D%AE%E5%BA%93%E6%81%A2%E5%A4%8D">&#x6570;&#x636E;&#x5E93;&#x6062;&#x590D;</h3>

<ul>
<li>&#x4E8B;&#x52A1;&#xFF1A;&#x662F;&#x7528;&#x6237;&#x5B9A;&#x4E49;&#x7684;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x5E93;&#x64CD;&#x4F5C;&#x5E8F;&#x5217;&#xFF0C;&#x8FD9;&#x4E9B;&#x64CD;&#x4F5C;&#x8981;&#x4E48;&#x5168;&#x505A;&#xFF0C;&#x8981;&#x4E48;&#x5168;&#x4E0D;&#x505A;&#xFF0C;&#x662F;&#x4E00;&#x4E2A;&#x4E0D;&#x53EF;&#x5206;&#x5272;&#x7684;&#x5DE5;&#x4F5C;&#x5355;&#x4F4D;&#x3002;</li>
<li>&#x4E8B;&#x7269;&#x7684; ACID &#x7279;&#x6027;&#xFF1A;&#x539F;&#x5B50;&#x6027;&#x3001;&#x4E00;&#x81F4;&#x6027;&#x3001;&#x9694;&#x79BB;&#x6027;&#x3001;&#x6301;&#x7EED;&#x6027;&#x3002;</li>
<li>&#x6062;&#x590D;&#x7684;&#x5B9E;&#x73B0;&#x6280;&#x672F;&#xFF1A;&#x5EFA;&#x7ACB;&#x5197;&#x4F59;&#x6570;&#x636E; -&gt; &#x5229;&#x7528;&#x5197;&#x4F59;&#x6570;&#x636E;&#x5B9E;&#x65BD;&#x6570;&#x636E;&#x5E93;&#x6062;&#x590D;&#x3002;</li>
<li>&#x5EFA;&#x7ACB;&#x5197;&#x4F59;&#x6570;&#x636E;&#x5E38;&#x7528;&#x6280;&#x672F;&#xFF1A;&#x6570;&#x636E;&#x8F6C;&#x50A8;&#xFF08;&#x52A8;&#x6001;&#x6D77;&#x91CF;&#x8F6C;&#x50A8;&#x3001;&#x52A8;&#x6001;&#x589E;&#x91CF;&#x8F6C;&#x50A8;&#x3001;&#x9759;&#x6001;&#x6D77;&#x91CF;&#x8F6C;&#x50A8;&#x3001;&#x9759;&#x6001;&#x589E;&#x91CF;&#x8F6C;&#x50A8;&#xFF09;&#x3001;&#x767B;&#x8BB0;&#x65E5;&#x5FD7;&#x6587;&#x4EF6;&#x3002;</li>
</ul>
<h3 class="mume-header" id="%E5%B9%B6%E5%8F%91%E6%8E%A7%E5%88%B6">&#x5E76;&#x53D1;&#x63A7;&#x5236;</h3>

<ul>
<li>&#x4E8B;&#x52A1;&#x662F;&#x5E76;&#x53D1;&#x63A7;&#x5236;&#x7684;&#x57FA;&#x672C;&#x5355;&#x4F4D;&#x3002;</li>
<li>&#x5E76;&#x53D1;&#x64CD;&#x4F5C;&#x5E26;&#x6765;&#x7684;&#x6570;&#x636E;&#x4E0D;&#x4E00;&#x81F4;&#x6027;&#x5305;&#x62EC;&#xFF1A;&#x4E22;&#x5931;&#x4FEE;&#x6539;&#x3001;&#x4E0D;&#x53EF;&#x91CD;&#x590D;&#x8BFB;&#x3001;&#x8BFB; &#x201C;&#x810F;&#x201D; &#x6570;&#x636E;&#x3002;</li>
<li>&#x5E76;&#x53D1;&#x63A7;&#x5236;&#x4E3B;&#x8981;&#x6280;&#x672F;&#xFF1A;&#x5C01;&#x9501;&#x3001;&#x65F6;&#x95F4;&#x6233;&#x3001;&#x4E50;&#x89C2;&#x63A7;&#x5236;&#x6CD5;&#x3001;&#x591A;&#x7248;&#x672C;&#x5E76;&#x53D1;&#x63A7;&#x5236;&#x7B49;&#x3002;</li>
<li>&#x57FA;&#x672C;&#x5C01;&#x9501;&#x7C7B;&#x578B;&#xFF1A;&#x6392;&#x4ED6;&#x9501;&#xFF08;X &#x9501; / &#x5199;&#x9501;&#xFF09;&#x3001;&#x5171;&#x4EAB;&#x9501;&#xFF08;S &#x9501; / &#x8BFB;&#x9501;&#xFF09;&#x3002;</li>
<li>&#x6D3B;&#x9501;&#x6B7B;&#x9501;&#xFF1A;
<ul>
<li>&#x6D3B;&#x9501;&#xFF1A;&#x4E8B;&#x52A1;&#x6C38;&#x8FDC;&#x5904;&#x4E8E;&#x7B49;&#x5F85;&#x72B6;&#x6001;&#xFF0C;&#x53EF;&#x901A;&#x8FC7;&#x5148;&#x6765;&#x5148;&#x670D;&#x52A1;&#x7684;&#x7B56;&#x7565;&#x907F;&#x514D;&#x3002;</li>
<li>&#x6B7B;&#x9501;&#xFF1A;&#x4E8B;&#x52A1;&#x6C38;&#x8FDC;&#x4E0D;&#x80FD;&#x7ED3;&#x675F;
<ul>
<li>&#x9884;&#x9632;&#xFF1A;&#x4E00;&#x6B21;&#x5C01;&#x9501;&#x6CD5;&#x3001;&#x987A;&#x5E8F;&#x5C01;&#x9501;&#x6CD5;&#xFF1B;</li>
<li>&#x8BCA;&#x65AD;&#xFF1A;&#x8D85;&#x65F6;&#x6CD5;&#x3001;&#x7B49;&#x5F85;&#x56FE;&#x6CD5;&#xFF1B;</li>
<li>&#x89E3;&#x9664;&#xFF1A;&#x64A4;&#x9500;&#x5904;&#x7406;&#x6B7B;&#x9501;&#x4EE3;&#x4EF7;&#x6700;&#x5C0F;&#x7684;&#x4E8B;&#x52A1;&#xFF0C;&#x5E76;&#x91CA;&#x653E;&#x6B64;&#x4E8B;&#x52A1;&#x7684;&#x6240;&#x6709;&#x7684;&#x9501;&#xFF0C;&#x4F7F;&#x5176;&#x4ED6;&#x4E8B;&#x52A1;&#x5F97;&#x4EE5;&#x7EE7;&#x7EED;&#x8FD0;&#x884C;&#x4E0B;&#x53BB;&#x3002;</li>
</ul>
</li>
</ul>
</li>
<li>&#x53EF;&#x4E32;&#x884C;&#x5316;&#x8C03;&#x5EA6;&#xFF1A;&#x591A;&#x4E2A;&#x4E8B;&#x52A1;&#x7684;&#x5E76;&#x53D1;&#x6267;&#x884C;&#x662F;&#x6B63;&#x786E;&#x7684;&#xFF0C;&#x5F53;&#x4E14;&#x4EC5;&#x5F53;&#x5176;&#x7ED3;&#x679C;&#x4E0E;&#x6309;&#x67D0;&#x4E00;&#x6B21;&#x5E8F;&#x4E32;&#x884C;&#x5730;&#x6267;&#x884C;&#x8FD9;&#x4E9B;&#x4E8B;&#x52A1;&#x65F6;&#x7684;&#x7ED3;&#x679C;&#x76F8;&#x540C;&#x3002;&#x53EF;&#x4E32;&#x884C;&#x6027;&#x65F6;&#x5E76;&#x53D1;&#x4E8B;&#x52A1;&#x6B63;&#x786E;&#x8C03;&#x5EA6;&#x7684;&#x51C6;&#x5219;&#x3002;</li>
</ul>
<p><a id="design-pattern" href></a></p>
<h2 class="mume-header" id="%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F">&#x1F4CF; &#x8BBE;&#x8BA1;&#x6A21;&#x5F0F;</h2>

<blockquote>
<p>&#x5404;&#x5927;&#x8BBE;&#x8BA1;&#x6A21;&#x5F0F;&#x4F8B;&#x5B50;&#x53C2;&#x8003;&#xFF1A;<a href="https://blog.csdn.net/liang19890820/article/details/66974516">CSDN&#x4E13;&#x680F; . C++ &#x8BBE;&#x8BA1;&#x6A21;&#x5F0F;</a> &#x7CFB;&#x5217;&#x535A;&#x6587;</p>
</blockquote>
<p><a href="DesignPattern">&#x8BBE;&#x8BA1;&#x6A21;&#x5F0F;&#x5DE5;&#x7A0B;&#x76EE;&#x5F55;</a></p>
<h3 class="mume-header" id="%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F">&#x5355;&#x4F8B;&#x6A21;&#x5F0F;</h3>

<p><a href="DesignPattern/SingletonPattern">&#x5355;&#x4F8B;&#x6A21;&#x5F0F;&#x4F8B;&#x5B50;</a></p>
<h3 class="mume-header" id="%E6%8A%BD%E8%B1%A1%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F">&#x62BD;&#x8C61;&#x5DE5;&#x5382;&#x6A21;&#x5F0F;</h3>

<p><a href="DesignPattern/AbstractFactoryPattern">&#x62BD;&#x8C61;&#x5DE5;&#x5382;&#x6A21;&#x5F0F;&#x4F8B;&#x5B50;</a></p>
<h3 class="mume-header" id="%E9%80%82%E9%85%8D%E5%99%A8%E6%A8%A1%E5%BC%8F">&#x9002;&#x914D;&#x5668;&#x6A21;&#x5F0F;</h3>

<p><a href="DesignPattern/AdapterPattern">&#x9002;&#x914D;&#x5668;&#x6A21;&#x5F0F;&#x4F8B;&#x5B50;</a></p>
<h3 class="mume-header" id="%E6%A1%A5%E6%8E%A5%E6%A8%A1%E5%BC%8F">&#x6865;&#x63A5;&#x6A21;&#x5F0F;</h3>

<p><a href="DesignPattern/BridgePattern">&#x6865;&#x63A5;&#x6A21;&#x5F0F;&#x4F8B;&#x5B50;</a></p>
<h3 class="mume-header" id="%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F">&#x89C2;&#x5BDF;&#x8005;&#x6A21;&#x5F0F;</h3>

<p><a href="DesignPattern/ObserverPattern">&#x89C2;&#x5BDF;&#x8005;&#x6A21;&#x5F0F;&#x4F8B;&#x5B50;</a></p>
<h3 class="mume-header" id="%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E7%9A%84%E5%85%AD%E5%A4%A7%E5%8E%9F%E5%88%99">&#x8BBE;&#x8BA1;&#x6A21;&#x5F0F;&#x7684;&#x516D;&#x5927;&#x539F;&#x5219;</h3>

<ul>
<li>&#x5355;&#x4E00;&#x804C;&#x8D23;&#x539F;&#x5219;&#xFF08;SRP&#xFF0C;Single Responsibility Principle&#xFF09;</li>
<li>&#x91CC;&#x6C0F;&#x66FF;&#x6362;&#x539F;&#x5219;&#xFF08;LSP&#xFF0C;Liskov Substitution Principle&#xFF09;</li>
<li>&#x4F9D;&#x8D56;&#x5012;&#x7F6E;&#x539F;&#x5219;&#xFF08;DIP&#xFF0C;Dependence Inversion Principle&#xFF09;</li>
<li>&#x63A5;&#x53E3;&#x9694;&#x79BB;&#x539F;&#x5219;&#xFF08;ISP&#xFF0C;Interface Segregation Principle&#xFF09;</li>
<li>&#x8FEA;&#x7C73;&#x7279;&#x6CD5;&#x5219;&#xFF08;LoD&#xFF0C;Law of Demeter&#xFF09;</li>
<li>&#x5F00;&#x653E;&#x5C01;&#x95ED;&#x539F;&#x5219;&#xFF08;OCP&#xFF0C;Open Close Principle&#xFF09;</li>
</ul>
<p><a id="link-loading-library" href></a></p>
<h2 class="mume-header" id="%EF%B8%8F-%E9%93%BE%E6%8E%A5%E8%A3%85%E8%BD%BD%E5%BA%93">&#x2699;&#xFE0F; &#x94FE;&#x63A5;&#x88C5;&#x8F7D;&#x5E93;</h2>

<blockquote>
<p>&#x672C;&#x8282;&#x90E8;&#x5206;&#x77E5;&#x8BC6;&#x70B9;&#x6765;&#x81EA;&#x300A;&#x7A0B;&#x5E8F;&#x5458;&#x7684;&#x81EA;&#x6211;&#x4FEE;&#x517B;&#x2014;&#x2014;&#x94FE;&#x63A5;&#x88C5;&#x8F7D;&#x5E93;&#x300B;</p>
</blockquote>
<h3 class="mume-header" id="%E5%86%85%E5%AD%98-%E6%A0%88-%E5%A0%86">&#x5185;&#x5B58;&#x3001;&#x6808;&#x3001;&#x5806;</h3>

<p>&#x4E00;&#x822C;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#x6709;&#x5982;&#x4E0B;&#x533A;&#x57DF;&#xFF1A;</p>
<ul>
<li>&#x6808;&#xFF1A;&#x7531;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x81EA;&#x52A8;&#x5206;&#x914D;&#x91CA;&#x653E;&#xFF0C;&#x5B58;&#x653E;&#x51FD;&#x6570;&#x7684;&#x53C2;&#x6570;&#x503C;&#x3001;&#x5C40;&#x90E8;&#x53D8;&#x91CF;&#x7B49;&#x7684;&#x503C;&#xFF0C;&#x7528;&#x4E8E;&#x7EF4;&#x62A4;&#x51FD;&#x6570;&#x8C03;&#x7528;&#x7684;&#x4E0A;&#x4E0B;&#x6587;</li>
<li>&#x5806;&#xFF1A;&#x4E00;&#x822C;&#x7531;&#x7A0B;&#x5E8F;&#x5458;&#x5206;&#x914D;&#x91CA;&#x653E;&#xFF0C;&#x82E5;&#x7A0B;&#x5E8F;&#x5458;&#x4E0D;&#x91CA;&#x653E;&#xFF0C;&#x7A0B;&#x5E8F;&#x7ED3;&#x675F;&#x65F6;&#x53EF;&#x80FD;&#x7531;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x56DE;&#x6536;&#xFF0C;&#x7528;&#x6765;&#x5BB9;&#x7EB3;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x52A8;&#x6001;&#x5206;&#x914D;&#x7684;&#x5185;&#x5B58;&#x533A;&#x57DF;</li>
<li>&#x53EF;&#x6267;&#x884C;&#x6587;&#x4EF6;&#x6620;&#x50CF;&#xFF1A;&#x5B58;&#x50A8;&#x7740;&#x53EF;&#x6267;&#x884C;&#x6587;&#x4EF6;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x7684;&#x6620;&#x50CF;&#xFF0C;&#x7531;&#x88C5;&#x8F7D;&#x5668;&#x88C5;&#x8F7D;&#x662F;&#x5C06;&#x53EF;&#x6267;&#x884C;&#x6587;&#x4EF6;&#x7684;&#x5185;&#x5B58;&#x8BFB;&#x53D6;&#x6216;&#x6620;&#x5C04;&#x5230;&#x8FD9;&#x91CC;</li>
<li>&#x4FDD;&#x7559;&#x533A;&#xFF1A;&#x4FDD;&#x7559;&#x533A;&#x5E76;&#x4E0D;&#x662F;&#x4E00;&#x4E2A;&#x5355;&#x4E00;&#x7684;&#x5185;&#x5B58;&#x533A;&#x57DF;&#xFF0C;&#x800C;&#x662F;&#x5BF9;&#x5185;&#x5B58;&#x4E2D;&#x53D7;&#x5230;&#x4FDD;&#x62A4;&#x800C;&#x7981;&#x6B62;&#x8BBF;&#x95EE;&#x7684;&#x5185;&#x5B58;&#x533A;&#x57DF;&#x7684;&#x603B;&#x79F0;&#xFF0C;&#x5982;&#x901A;&#x5E38; C &#x8BED;&#x8A00;&#x8BB2;&#x65E0;&#x6548;&#x6307;&#x9488;&#x8D4B;&#x503C;&#x4E3A; 0&#xFF08;NULL&#xFF09;&#xFF0C;&#x56E0;&#x6B64; 0 &#x5730;&#x5740;&#x6B63;&#x5E38;&#x60C5;&#x51B5;&#x4E0B;&#x4E0D;&#x53EF;&#x80FD;&#x6709;&#x6548;&#x7684;&#x8BBF;&#x95EE;&#x6570;&#x636E;</li>
</ul>
<h4 class="mume-header" id="%E6%A0%88">&#x6808;</h4>

<p>&#x6808;&#x4FDD;&#x5B58;&#x4E86;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#x8C03;&#x7528;&#x6240;&#x9700;&#x8981;&#x7684;&#x7EF4;&#x62A4;&#x4FE1;&#x606F;&#xFF0C;&#x5E38;&#x88AB;&#x79F0;&#x4E3A;&#x5806;&#x6808;&#x5E27;&#xFF08;Stack Frame&#xFF09;&#x6216;&#x6D3B;&#x52A8;&#x8BB0;&#x5F55;&#xFF08;Activate Record&#xFF09;&#xFF0C;&#x4E00;&#x822C;&#x5305;&#x542B;&#x4EE5;&#x4E0B;&#x51E0;&#x65B9;&#x9762;&#xFF1A;</p>
<ul>
<li>&#x51FD;&#x6570;&#x7684;&#x8FD4;&#x56DE;&#x5730;&#x5740;&#x548C;&#x53C2;&#x6570;</li>
<li>&#x4E34;&#x65F6;&#x53D8;&#x91CF;&#xFF1A;&#x5305;&#x62EC;&#x51FD;&#x6570;&#x7684;&#x975E;&#x9759;&#x6001;&#x5C40;&#x90E8;&#x53D8;&#x91CF;&#x4EE5;&#x53CA;&#x7F16;&#x8BD1;&#x5668;&#x81EA;&#x52A8;&#x751F;&#x6210;&#x7684;&#x5176;&#x4ED6;&#x4E34;&#x65F6;&#x53D8;&#x91CF;</li>
<li>&#x4FDD;&#x5B58;&#x4E0A;&#x4E0B;&#x6587;&#xFF1A;&#x5305;&#x62EC;&#x51FD;&#x6570;&#x8C03;&#x7528;&#x524D;&#x540E;&#x9700;&#x8981;&#x4FDD;&#x6301;&#x4E0D;&#x53D8;&#x7684;&#x5BC4;&#x5B58;&#x5668;</li>
</ul>
<h4 class="mume-header" id="%E5%A0%86">&#x5806;</h4>

<p>&#x5806;&#x5206;&#x914D;&#x7B97;&#x6CD5;&#xFF1A;</p>
<ul>
<li>&#x7A7A;&#x95F2;&#x94FE;&#x8868;&#xFF08;Free List&#xFF09;</li>
<li>&#x4F4D;&#x56FE;&#xFF08;Bitmap&#xFF09;</li>
<li>&#x5BF9;&#x8C61;&#x6C60;</li>
</ul>
<h4 class="mume-header" id="%E6%AE%B5%E9%94%99%E8%AF%AFsegment-fault-%E6%88%96-%E9%9D%9E%E6%B3%95%E6%93%8D%E4%BD%9C%E8%AF%A5%E5%86%85%E5%AD%98%E5%9C%B0%E5%9D%80%E4%B8%8D%E8%83%BD-readwrite">&#x201C;&#x6BB5;&#x9519;&#x8BEF;&#xFF08;segment fault&#xFF09;&#x201D; &#x6216; &#x201C;&#x975E;&#x6CD5;&#x64CD;&#x4F5C;&#xFF0C;&#x8BE5;&#x5185;&#x5B58;&#x5730;&#x5740;&#x4E0D;&#x80FD; read/write&#x201D;</h4>

<p>&#x5178;&#x578B;&#x7684;&#x975E;&#x6CD5;&#x6307;&#x9488;&#x89E3;&#x5F15;&#x7528;&#x9020;&#x6210;&#x7684;&#x9519;&#x8BEF;&#x3002;&#x5F53;&#x6307;&#x9488;&#x6307;&#x5411;&#x4E00;&#x4E2A;&#x4E0D;&#x5141;&#x8BB8;&#x8BFB;&#x5199;&#x7684;&#x5185;&#x5B58;&#x5730;&#x5740;&#xFF0C;&#x800C;&#x7A0B;&#x5E8F;&#x5374;&#x8BD5;&#x56FE;&#x5229;&#x7528;&#x6307;&#x9488;&#x6765;&#x8BFB;&#x6216;&#x5199;&#x8BE5;&#x5730;&#x5740;&#x65F6;&#xFF0C;&#x4F1A;&#x51FA;&#x73B0;&#x8FD9;&#x4E2A;&#x9519;&#x8BEF;&#x3002;</p>
<p>&#x666E;&#x904D;&#x539F;&#x56E0;&#xFF1A;</p>
<ul>
<li>&#x5C06;&#x6307;&#x9488;&#x521D;&#x59CB;&#x5316;&#x4E3A; NULL&#xFF0C;&#x4E4B;&#x540E;&#x6CA1;&#x6709;&#x7ED9;&#x5B83;&#x4E00;&#x4E2A;&#x5408;&#x7406;&#x7684;&#x503C;&#x5C31;&#x5F00;&#x59CB;&#x4F7F;&#x7528;&#x6307;&#x9488;</li>
<li>&#x6CA1;&#x7528;&#x521D;&#x59CB;&#x5316;&#x6808;&#x4E2D;&#x7684;&#x6307;&#x9488;&#xFF0C;&#x6307;&#x9488;&#x7684;&#x503C;&#x4E00;&#x822C;&#x4F1A;&#x662F;&#x968F;&#x673A;&#x6570;&#xFF0C;&#x4E4B;&#x540E;&#x5C31;&#x76F4;&#x63A5;&#x5F00;&#x59CB;&#x4F7F;&#x7528;&#x6307;&#x9488;</li>
</ul>
<h3 class="mume-header" id="%E7%BC%96%E8%AF%91%E9%93%BE%E6%8E%A5">&#x7F16;&#x8BD1;&#x94FE;&#x63A5;</h3>

<h4 class="mume-header" id="%E5%90%84%E5%B9%B3%E5%8F%B0%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F">&#x5404;&#x5E73;&#x53F0;&#x6587;&#x4EF6;&#x683C;&#x5F0F;</h4>

<table>
<thead>
<tr>
<th>&#x5E73;&#x53F0;</th>
<th>&#x53EF;&#x6267;&#x884C;&#x6587;&#x4EF6;</th>
<th>&#x76EE;&#x6807;&#x6587;&#x4EF6;</th>
<th>&#x52A8;&#x6001;&#x5E93;/&#x5171;&#x4EAB;&#x5BF9;&#x8C61;</th>
<th>&#x9759;&#x6001;&#x5E93;</th>
</tr>
</thead>
<tbody>
<tr>
<td>Windows</td>
<td>exe</td>
<td>obj</td>
<td>dll</td>
<td>lib</td>
</tr>
<tr>
<td>Unix/Linux</td>
<td>ELF&#x3001;out</td>
<td>o</td>
<td>so</td>
<td>a</td>
</tr>
<tr>
<td>Mac</td>
<td>Mach-O</td>
<td>o</td>
<td>dylib&#x3001;tbd&#x3001;framework</td>
<td>a&#x3001;framework</td>
</tr>
</tbody>
</table>
<h4 class="mume-header" id="%E7%BC%96%E8%AF%91%E9%93%BE%E6%8E%A5%E8%BF%87%E7%A8%8B">&#x7F16;&#x8BD1;&#x94FE;&#x63A5;&#x8FC7;&#x7A0B;</h4>

<ol>
<li>&#x9884;&#x7F16;&#x8BD1;&#xFF08;&#x9884;&#x7F16;&#x8BD1;&#x5668;&#x5904;&#x7406;&#x5982; <code>#include</code>&#x3001;<code>#define</code> &#x7B49;&#x9884;&#x7F16;&#x8BD1;&#x6307;&#x4EE4;&#xFF0C;&#x751F;&#x6210; <code>.i</code> &#x6216; <code>.ii</code> &#x6587;&#x4EF6;&#xFF09;</li>
<li>&#x7F16;&#x8BD1;&#xFF08;&#x7F16;&#x8BD1;&#x5668;&#x8FDB;&#x884C;&#x8BCD;&#x6CD5;&#x5206;&#x6790;&#x3001;&#x8BED;&#x6CD5;&#x5206;&#x6790;&#x3001;&#x8BED;&#x4E49;&#x5206;&#x6790;&#x3001;&#x4E2D;&#x95F4;&#x4EE3;&#x7801;&#x751F;&#x6210;&#x3001;&#x76EE;&#x6807;&#x4EE3;&#x7801;&#x751F;&#x6210;&#x3001;&#x4F18;&#x5316;&#xFF0C;&#x751F;&#x6210; <code>.s</code> &#x6587;&#x4EF6;&#xFF09;</li>
<li>&#x6C47;&#x7F16;&#xFF08;&#x6C47;&#x7F16;&#x5668;&#x628A;&#x6C47;&#x7F16;&#x7801;&#x7FFB;&#x8BD1;&#x6210;&#x673A;&#x5668;&#x7801;&#xFF0C;&#x751F;&#x6210; <code>.o</code> &#x6587;&#x4EF6;&#xFF09;</li>
<li>&#x94FE;&#x63A5;&#xFF08;&#x8FDE;&#x63A5;&#x5668;&#x8FDB;&#x884C;&#x5730;&#x5740;&#x548C;&#x7A7A;&#x95F4;&#x5206;&#x914D;&#x3001;&#x7B26;&#x53F7;&#x51B3;&#x8BAE;&#x3001;&#x91CD;&#x5B9A;&#x4F4D;&#xFF0C;&#x751F;&#x6210; <code>.out</code> &#x6587;&#x4EF6;&#xFF09;</li>
</ol>
<blockquote>
<p>&#x73B0;&#x5728;&#x7248;&#x672C; GCC &#x628A;&#x9884;&#x7F16;&#x8BD1;&#x548C;&#x7F16;&#x8BD1;&#x5408;&#x6210;&#x4E00;&#x6B65;&#xFF0C;&#x9884;&#x7F16;&#x8BD1;&#x7F16;&#x8BD1;&#x7A0B;&#x5E8F; cc1&#x3001;&#x6C47;&#x7F16;&#x5668; as&#x3001;&#x8FDE;&#x63A5;&#x5668; ld</p>
</blockquote>
<blockquote>
<p>MSVC &#x7F16;&#x8BD1;&#x73AF;&#x5883;&#xFF0C;&#x7F16;&#x8BD1;&#x5668; cl&#x3001;&#x8FDE;&#x63A5;&#x5668; link&#x3001;&#x53EF;&#x6267;&#x884C;&#x6587;&#x4EF6;&#x67E5;&#x770B;&#x5668; dumpbin</p>
</blockquote>
<h4 class="mume-header" id="%E7%9B%AE%E6%A0%87%E6%96%87%E4%BB%B6">&#x76EE;&#x6807;&#x6587;&#x4EF6;</h4>

<p>&#x7F16;&#x8BD1;&#x5668;&#x7F16;&#x8BD1;&#x6E90;&#x4EE3;&#x7801;&#x540E;&#x751F;&#x6210;&#x7684;&#x6587;&#x4EF6;&#x53EB;&#x505A;&#x76EE;&#x6807;&#x6587;&#x4EF6;&#x3002;&#x76EE;&#x6807;&#x6587;&#x4EF6;&#x4ECE;&#x7ED3;&#x6784;&#x4E0A;&#x8BB2;&#xFF0C;&#x5B83;&#x662F;&#x5DF2;&#x7ECF;&#x7F16;&#x8BD1;&#x540E;&#x7684;&#x53EF;&#x6267;&#x884C;&#x6587;&#x4EF6;&#x683C;&#x5F0F;&#xFF0C;&#x53EA;&#x662F;&#x8FD8;&#x6CA1;&#x6709;&#x7ECF;&#x8FC7;&#x94FE;&#x63A5;&#x7684;&#x8FC7;&#x7A0B;&#xFF0C;&#x5176;&#x4E2D;&#x53EF;&#x80FD;&#x6709;&#x4E9B;&#x7B26;&#x53F7;&#x6216;&#x6709;&#x4E9B;&#x5730;&#x5740;&#x8FD8;&#x6CA1;&#x6709;&#x88AB;&#x8C03;&#x6574;&#x3002;</p>
<blockquote>
<p>&#x53EF;&#x6267;&#x884C;&#x6587;&#x4EF6;&#xFF08;Windows &#x7684; <code>.exe</code> &#x548C; Linux &#x7684; <code>ELF</code>&#xFF09;&#x3001;&#x52A8;&#x6001;&#x94FE;&#x63A5;&#x5E93;&#xFF08;Windows &#x7684; <code>.dll</code> &#x548C; Linux &#x7684; <code>.so</code>&#xFF09;&#x3001;&#x9759;&#x6001;&#x94FE;&#x63A5;&#x5E93;&#xFF08;Windows &#x7684; <code>.lib</code> &#x548C; Linux &#x7684; <code>.a</code>&#xFF09;&#x90FD;&#x662F;&#x6309;&#x7167;&#x53EF;&#x6267;&#x884C;&#x6587;&#x4EF6;&#x683C;&#x5F0F;&#x5B58;&#x50A8;&#xFF08;Windows &#x6309;&#x7167; PE-COFF&#xFF0C;Linux &#x6309;&#x7167; ELF&#xFF09;</p>
</blockquote>
<h5 class="mume-header" id="%E7%9B%AE%E6%A0%87%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F">&#x76EE;&#x6807;&#x6587;&#x4EF6;&#x683C;&#x5F0F;</h5>

<ul>
<li>Windows &#x7684; PE&#xFF08;Portable Executable&#xFF09;&#xFF0C;&#x6216;&#x79F0;&#x4E3A; PE-COFF&#xFF0C;<code>.obj</code> &#x683C;&#x5F0F;</li>
<li>Linux &#x7684; ELF&#xFF08;Executable Linkable Format&#xFF09;&#xFF0C;<code>.o</code> &#x683C;&#x5F0F;</li>
<li>Intel/Microsoft &#x7684; OMF&#xFF08;Object Module Format&#xFF09;</li>
<li>Unix &#x7684; <code>a.out</code> &#x683C;&#x5F0F;</li>
<li>MS-DOS &#x7684; <code>.COM</code> &#x683C;&#x5F0F;</li>
</ul>
<blockquote>
<p>PE &#x548C; ELF &#x90FD;&#x662F; COFF&#xFF08;Common File Format&#xFF09;&#x7684;&#x53D8;&#x79CD;</p>
</blockquote>
<h5 class="mume-header" id="%E7%9B%AE%E6%A0%87%E6%96%87%E4%BB%B6%E5%AD%98%E5%82%A8%E7%BB%93%E6%9E%84">&#x76EE;&#x6807;&#x6587;&#x4EF6;&#x5B58;&#x50A8;&#x7ED3;&#x6784;</h5>

<table>
<thead>
<tr>
<th>&#x6BB5;</th>
<th>&#x529F;&#x80FD;</th>
</tr>
</thead>
<tbody>
<tr>
<td>File Header</td>
<td>&#x6587;&#x4EF6;&#x5934;&#xFF0C;&#x63CF;&#x8FF0;&#x6574;&#x4E2A;&#x6587;&#x4EF6;&#x7684;&#x6587;&#x4EF6;&#x5C5E;&#x6027;&#xFF08;&#x5305;&#x62EC;&#x6587;&#x4EF6;&#x662F;&#x5426;&#x53EF;&#x6267;&#x884C;&#x3001;&#x662F;&#x9759;&#x6001;&#x94FE;&#x63A5;&#x6216;&#x52A8;&#x6001;&#x8FDE;&#x63A5;&#x53CA;&#x5165;&#x53E3;&#x5730;&#x5740;&#x3001;&#x76EE;&#x6807;&#x786C;&#x4EF6;&#x3001;&#x76EE;&#x6807;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7B49;&#xFF09;</td>
</tr>
<tr>
<td>.text section</td>
<td>&#x4EE3;&#x7801;&#x6BB5;&#xFF0C;&#x6267;&#x884C;&#x8BED;&#x53E5;&#x7F16;&#x8BD1;&#x6210;&#x7684;&#x673A;&#x5668;&#x4EE3;&#x7801;</td>
</tr>
<tr>
<td>.data section</td>
<td>&#x6570;&#x636E;&#x6BB5;&#xFF0C;&#x5DF2;&#x521D;&#x59CB;&#x5316;&#x7684;&#x5168;&#x5C40;&#x53D8;&#x91CF;&#x548C;&#x5C40;&#x90E8;&#x9759;&#x6001;&#x53D8;&#x91CF;</td>
</tr>
<tr>
<td>.bss section</td>
<td>BSS &#x6BB5;&#xFF08;Block Started by Symbol&#xFF09;&#xFF0C;&#x672A;&#x521D;&#x59CB;&#x5316;&#x7684;&#x5168;&#x5C40;&#x53D8;&#x91CF;&#x548C;&#x5C40;&#x90E8;&#x9759;&#x6001;&#x53D8;&#x91CF;&#xFF08;&#x56E0;&#x4E3A;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A; 0&#xFF0C;&#x6240;&#x4EE5;&#x53EA;&#x662F;&#x5728;&#x6B64;&#x9884;&#x7559;&#x4F4D;&#x7F6E;&#xFF0C;&#x4E0D;&#x5360;&#x7A7A;&#x95F4;&#xFF09;</td>
</tr>
<tr>
<td>.rodata section</td>
<td>&#x53EA;&#x8BFB;&#x6570;&#x636E;&#x6BB5;&#xFF0C;&#x5B58;&#x653E;&#x53EA;&#x8BFB;&#x6570;&#x636E;&#xFF0C;&#x4E00;&#x822C;&#x662F;&#x7A0B;&#x5E8F;&#x91CC;&#x9762;&#x7684;&#x53EA;&#x8BFB;&#x53D8;&#x91CF;&#xFF08;&#x5982; const &#x4FEE;&#x9970;&#x7684;&#x53D8;&#x91CF;&#xFF09;&#x548C;&#x5B57;&#x7B26;&#x4E32;&#x5E38;&#x91CF;</td>
</tr>
<tr>
<td>.comment section</td>
<td>&#x6CE8;&#x91CA;&#x4FE1;&#x606F;&#x6BB5;&#xFF0C;&#x5B58;&#x653E;&#x7F16;&#x8BD1;&#x5668;&#x7248;&#x672C;&#x4FE1;&#x606F;</td>
</tr>
<tr>
<td>.note.GNU-stack section</td>
<td>&#x5806;&#x6808;&#x63D0;&#x793A;&#x6BB5;</td>
</tr>
</tbody>
</table>
<blockquote>
<p>&#x5176;&#x4ED6;&#x6BB5;&#x7565;</p>
</blockquote>
<h4 class="mume-header" id="%E9%93%BE%E6%8E%A5%E7%9A%84%E6%8E%A5%E5%8F%A3%E7%AC%A6%E5%8F%B7">&#x94FE;&#x63A5;&#x7684;&#x63A5;&#x53E3;&#x2014;&#x2014;&#x2014;&#x2014;&#x7B26;&#x53F7;</h4>

<p>&#x5728;&#x94FE;&#x63A5;&#x4E2D;&#xFF0C;&#x76EE;&#x6807;&#x6587;&#x4EF6;&#x4E4B;&#x95F4;&#x76F8;&#x4E92;&#x62FC;&#x5408;&#x5B9E;&#x9645;&#x4E0A;&#x662F;&#x76EE;&#x6807;&#x6587;&#x4EF6;&#x4E4B;&#x95F4;&#x5BF9;&#x5730;&#x5740;&#x7684;&#x5F15;&#x7528;&#xFF0C;&#x5373;&#x5BF9;&#x51FD;&#x6570;&#x548C;&#x53D8;&#x91CF;&#x7684;&#x5730;&#x5740;&#x7684;&#x5F15;&#x7528;&#x3002;&#x6211;&#x4EEC;&#x5C06;&#x51FD;&#x6570;&#x548C;&#x53D8;&#x91CF;&#x7EDF;&#x79F0;&#x4E3A;&#x7B26;&#x53F7;&#xFF08;Symbol&#xFF09;&#xFF0C;&#x51FD;&#x6570;&#x540D;&#x6216;&#x53D8;&#x91CF;&#x540D;&#x5C31;&#x662F;&#x7B26;&#x53F7;&#x540D;&#xFF08;Symbol Name&#xFF09;&#x3002;</p>
<p>&#x5982;&#x4E0B;&#x7B26;&#x53F7;&#x8868;&#xFF08;Symbol Table&#xFF09;&#xFF1A;</p>
<table>
<thead>
<tr>
<th>Symbol&#xFF08;&#x7B26;&#x53F7;&#x540D;&#xFF09;</th>
<th>Symbol Value &#xFF08;&#x5730;&#x5740;&#xFF09;</th>
</tr>
</thead>
<tbody>
<tr>
<td>main</td>
<td>0x100</td>
</tr>
<tr>
<td>Add</td>
<td>0x123</td>
</tr>
<tr>
<td>...</td>
<td>...</td>
</tr>
</tbody>
</table>
<h3 class="mume-header" id="linux-%E7%9A%84%E5%85%B1%E4%BA%AB%E5%BA%93shared-library">Linux &#x7684;&#x5171;&#x4EAB;&#x5E93;&#xFF08;Shared Library&#xFF09;</h3>

<p>Linux &#x4E0B;&#x7684;&#x5171;&#x4EAB;&#x5E93;&#x5C31;&#x662F;&#x666E;&#x901A;&#x7684; ELF &#x5171;&#x4EAB;&#x5BF9;&#x8C61;&#x3002;</p>
<p>&#x5171;&#x4EAB;&#x5E93;&#x7248;&#x672C;&#x66F4;&#x65B0;&#x5E94;&#x8BE5;&#x4FDD;&#x8BC1;&#x4E8C;&#x8FDB;&#x5236;&#x63A5;&#x53E3; ABI&#xFF08;Application Binary Interface&#xFF09;&#x7684;&#x517C;&#x5BB9;</p>
<h4 class="mume-header" id="%E5%91%BD%E5%90%8D">&#x547D;&#x540D;</h4>

<p><code>libname.so.x.y.z</code></p>
<ul>
<li>x&#xFF1A;&#x4E3B;&#x7248;&#x672C;&#x53F7;&#xFF0C;&#x4E0D;&#x540C;&#x4E3B;&#x7248;&#x672C;&#x53F7;&#x7684;&#x5E93;&#x4E4B;&#x95F4;&#x4E0D;&#x517C;&#x5BB9;&#xFF0C;&#x9700;&#x8981;&#x91CD;&#x65B0;&#x7F16;&#x8BD1;</li>
<li>y&#xFF1A;&#x6B21;&#x7248;&#x672C;&#x53F7;&#xFF0C;&#x9AD8;&#x7248;&#x672C;&#x53F7;&#x5411;&#x540E;&#x517C;&#x5BB9;&#x4F4E;&#x7248;&#x672C;&#x53F7;</li>
<li>z&#xFF1A;&#x53D1;&#x5E03;&#x7248;&#x672C;&#x53F7;&#xFF0C;&#x4E0D;&#x5BF9;&#x63A5;&#x53E3;&#x8FDB;&#x884C;&#x66F4;&#x6539;&#xFF0C;&#x5B8C;&#x5168;&#x517C;&#x5BB9;</li>
</ul>
<h4 class="mume-header" id="%E8%B7%AF%E5%BE%84">&#x8DEF;&#x5F84;</h4>

<p>&#x5927;&#x90E8;&#x5206;&#x5305;&#x62EC; Linux &#x5728;&#x5185;&#x7684;&#x5F00;&#x6E90;&#x7CFB;&#x7EDF;&#x9075;&#x5FAA; FHS&#xFF08;File Hierarchy Standard&#xFF09;&#x7684;&#x6807;&#x51C6;&#xFF0C;&#x8FD9;&#x6807;&#x51C6;&#x89C4;&#x5B9A;&#x4E86;&#x7CFB;&#x7EDF;&#x6587;&#x4EF6;&#x5982;&#x4F55;&#x5B58;&#x653E;&#xFF0C;&#x5305;&#x62EC;&#x5404;&#x4E2A;&#x76EE;&#x5F55;&#x7ED3;&#x6784;&#x3001;&#x7EC4;&#x7EC7;&#x548C;&#x4F5C;&#x7528;&#x3002;</p>
<ul>
<li><code>/lib</code>&#xFF1A;&#x5B58;&#x653E;&#x7CFB;&#x7EDF;&#x6700;&#x5173;&#x952E;&#x548C;&#x6700;&#x57FA;&#x7840;&#x7684;&#x5171;&#x4EAB;&#x5E93;&#xFF0C;&#x5982;&#x52A8;&#x6001;&#x94FE;&#x63A5;&#x5668;&#x3001;C &#x8BED;&#x8A00;&#x8FD0;&#x884C;&#x5E93;&#x3001;&#x6570;&#x5B66;&#x5E93;&#x7B49;</li>
<li><code>/usr/lib</code>&#xFF1A;&#x5B58;&#x653E;&#x975E;&#x7CFB;&#x7EDF;&#x8FD0;&#x884C;&#x65F6;&#x6240;&#x9700;&#x8981;&#x7684;&#x5173;&#x952E;&#x6027;&#x7684;&#x5E93;&#xFF0C;&#x4E3B;&#x8981;&#x662F;&#x5F00;&#x53D1;&#x5E93;</li>
<li><code>/usr/local/lib</code>&#xFF1A;&#x5B58;&#x653E;&#x8DDF;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x672C;&#x8EAB;&#x5E76;&#x4E0D;&#x5341;&#x5206;&#x76F8;&#x5173;&#x7684;&#x5E93;&#xFF0C;&#x4E3B;&#x8981;&#x662F;&#x4E00;&#x4E9B;&#x7B2C;&#x4E09;&#x65B9;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x7684;&#x5E93;</li>
</ul>
<blockquote>
<p>&#x52A8;&#x6001;&#x94FE;&#x63A5;&#x5668;&#x4F1A;&#x5728; <code>/lib</code>&#x3001;<code>/usr/lib</code> &#x548C;&#x7531; <code>/etc/ld.so.conf</code> &#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x6307;&#x5B9A;&#x7684;&#xFF0C;&#x76EE;&#x5F55;&#x4E2D;&#x67E5;&#x627E;&#x5171;&#x4EAB;&#x5E93;</p>
</blockquote>
<h4 class="mume-header" id="%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F">&#x73AF;&#x5883;&#x53D8;&#x91CF;</h4>

<ul>
<li><code>LD_LIBRARY_PATH</code>&#xFF1A;&#x4E34;&#x65F6;&#x6539;&#x53D8;&#x67D0;&#x4E2A;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x7684;&#x5171;&#x4EAB;&#x5E93;&#x67E5;&#x627E;&#x8DEF;&#x5F84;&#xFF0C;&#x800C;&#x4E0D;&#x4F1A;&#x5F71;&#x54CD;&#x5176;&#x4ED6;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;</li>
<li><code>LD_PRELOAD</code>&#xFF1A;&#x6307;&#x5B9A;&#x9884;&#x5148;&#x88C5;&#x8F7D;&#x7684;&#x4E00;&#x4E9B;&#x5171;&#x4EAB;&#x5E93;&#x751A;&#x81F3;&#x662F;&#x76EE;&#x6807;&#x6587;&#x4EF6;</li>
<li><code>LD_DEBUG</code>&#xFF1A;&#x6253;&#x5F00;&#x52A8;&#x6001;&#x94FE;&#x63A5;&#x5668;&#x7684;&#x8C03;&#x8BD5;&#x529F;&#x80FD;</li>
</ul>
<h4 class="mume-header" id="so-%E5%85%B1%E4%BA%AB%E5%BA%93%E7%9A%84%E7%BC%96%E5%86%99">so &#x5171;&#x4EAB;&#x5E93;&#x7684;&#x7F16;&#x5199;</h4>

<p>&#x4F7F;&#x7528; CLion &#x7F16;&#x5199;&#x5171;&#x4EAB;&#x5E93;</p>
<p>&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x540D;&#x4E3A; MySharedLib &#x7684;&#x5171;&#x4EAB;&#x5E93;</p>
<p>CMakeLists.txt</p>
<pre data-role="codeBlock" data-info="cmake" class="language-cmake"><span class="token keyword">cmake_minimum_required</span><span class="token punctuation">(</span><span class="token property">VERSION</span> <span class="token number">3.10</span><span class="token punctuation">)</span>
<span class="token keyword">project</span><span class="token punctuation">(</span>MySharedLib<span class="token punctuation">)</span>

<span class="token keyword">set</span><span class="token punctuation">(</span><span class="token variable">CMAKE_CXX_STANDARD</span> <span class="token number">11</span><span class="token punctuation">)</span>

<span class="token keyword">add_library</span><span class="token punctuation">(</span>MySharedLib <span class="token namespace">SHARED</span> library.cpp library.h<span class="token punctuation">)</span>
</pre><p>library.h</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">ifndef</span> <span class="token expression">MYSHAREDLIB_LIBRARY_H</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">MYSHAREDLIB_LIBRARY_H</span></span>

<span class="token comment">// &#x6253;&#x5370; Hello World!</span>
<span class="token keyword">void</span> <span class="token function">hello</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token comment">// &#x4F7F;&#x7528;&#x53EF;&#x53D8;&#x6A21;&#x7248;&#x53C2;&#x6570;&#x6C42;&#x548C;</span>
<span class="token keyword">template</span> <span class="token operator">&lt;</span><span class="token keyword">typename</span> <span class="token class-name">T</span><span class="token operator">&gt;</span>
T <span class="token function">sum</span><span class="token punctuation">(</span>T t<span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    <span class="token keyword">return</span> t<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">template</span> <span class="token operator">&lt;</span><span class="token keyword">typename</span> <span class="token class-name">T</span><span class="token punctuation">,</span> <span class="token keyword">typename</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>Types<span class="token operator">&gt;</span>
T <span class="token function">sum</span><span class="token punctuation">(</span>T first<span class="token punctuation">,</span> Types <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> rest<span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    <span class="token keyword">return</span> first <span class="token operator">+</span> sum<span class="token operator">&lt;</span>T<span class="token operator">&gt;</span><span class="token punctuation">(</span>rest<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">endif</span></span>
</pre><p>library.cpp</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;iostream&gt;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&quot;library.h&quot;</span></span>

<span class="token keyword">void</span> <span class="token function">hello</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    std<span class="token operator">::</span>cout <span class="token operator">&lt;&lt;</span> <span class="token string">&quot;Hello, World!&quot;</span> <span class="token operator">&lt;&lt;</span> std<span class="token operator">::</span>endl<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</pre><h4 class="mume-header" id="so-%E5%85%B1%E4%BA%AB%E5%BA%93%E7%9A%84%E4%BD%BF%E7%94%A8%E8%A2%AB%E5%8F%AF%E6%89%A7%E8%A1%8C%E9%A1%B9%E7%9B%AE%E8%B0%83%E7%94%A8">so &#x5171;&#x4EAB;&#x5E93;&#x7684;&#x4F7F;&#x7528;&#xFF08;&#x88AB;&#x53EF;&#x6267;&#x884C;&#x9879;&#x76EE;&#x8C03;&#x7528;&#xFF09;</h4>

<p>&#x4F7F;&#x7528; CLion &#x8C03;&#x7528;&#x5171;&#x4EAB;&#x5E93;</p>
<p>&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x540D;&#x4E3A; TestSharedLib &#x7684;&#x53EF;&#x6267;&#x884C;&#x9879;&#x76EE;</p>
<p>CMakeLists.txt</p>
<pre data-role="codeBlock" data-info="cmake" class="language-cmake"><span class="token keyword">cmake_minimum_required</span><span class="token punctuation">(</span><span class="token property">VERSION</span> <span class="token number">3.10</span><span class="token punctuation">)</span>
<span class="token keyword">project</span><span class="token punctuation">(</span>TestSharedLib<span class="token punctuation">)</span>

<span class="token comment"># C++11 &#x7F16;&#x8BD1;</span>
<span class="token keyword">set</span><span class="token punctuation">(</span><span class="token variable">CMAKE_CXX_STANDARD</span> <span class="token number">11</span><span class="token punctuation">)</span>

<span class="token comment"># &#x5934;&#x6587;&#x4EF6;&#x8DEF;&#x5F84;</span>
<span class="token keyword">set</span><span class="token punctuation">(</span>INC_DIR /home/xx/code/clion/MySharedLib<span class="token punctuation">)</span>
<span class="token comment"># &#x5E93;&#x6587;&#x4EF6;&#x8DEF;&#x5F84;</span>
<span class="token keyword">set</span><span class="token punctuation">(</span>LIB_DIR /home/xx/code/clion/MySharedLib/cmake-build-debug<span class="token punctuation">)</span>

<span class="token keyword">include_directories</span><span class="token punctuation">(</span><span class="token punctuation">${</span>INC_DIR<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token keyword">link_directories</span><span class="token punctuation">(</span><span class="token punctuation">${</span>LIB_DIR<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token keyword">link_libraries</span><span class="token punctuation">(</span>MySharedLib<span class="token punctuation">)</span>

<span class="token keyword">add_executable</span><span class="token punctuation">(</span>TestSharedLib main.cpp<span class="token punctuation">)</span>

<span class="token comment"># &#x94FE;&#x63A5; MySharedLib &#x5E93;</span>
<span class="token keyword">target_link_libraries</span><span class="token punctuation">(</span>TestSharedLib MySharedLib<span class="token punctuation">)</span>
</pre><p>main.cpp</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;iostream&gt;</span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&quot;library.h&quot;</span></span>
<span class="token keyword">using</span> std<span class="token operator">::</span>cout<span class="token punctuation">;</span>
<span class="token keyword">using</span> std<span class="token operator">::</span>endl<span class="token punctuation">;</span>

<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>

    <span class="token function">hello</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    cout <span class="token operator">&lt;&lt;</span> <span class="token string">&quot;1 + 2 = &quot;</span> <span class="token operator">&lt;&lt;</span> <span class="token function">sum</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token operator">&lt;&lt;</span> endl<span class="token punctuation">;</span>
    cout <span class="token operator">&lt;&lt;</span> <span class="token string">&quot;1 + 2 + 3 = &quot;</span> <span class="token operator">&lt;&lt;</span> <span class="token function">sum</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span> <span class="token operator">&lt;&lt;</span> endl<span class="token punctuation">;</span>

    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</pre><p>&#x6267;&#x884C;&#x7ED3;&#x679C;</p>
<pre data-role="codeBlock" data-info class="language-"><code>Hello, World!
1 + 2 = 3
1 + 2 + 3 = 6
</code></pre><h3 class="mume-header" id="windows-%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%85%A5%E5%8F%A3%E5%87%BD%E6%95%B0">Windows &#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x5165;&#x53E3;&#x51FD;&#x6570;</h3>

<ul>
<li>GUI&#xFF08;Graphical User Interface&#xFF09;&#x5E94;&#x7528;&#xFF0C;&#x94FE;&#x63A5;&#x5668;&#x9009;&#x9879;&#xFF1A;<code>/SUBSYSTEM:WINDOWS</code></li>
<li>CUI&#xFF08;Console User Interface&#xFF09;&#x5E94;&#x7528;&#xFF0C;&#x94FE;&#x63A5;&#x5668;&#x9009;&#x9879;&#xFF1A;<code>/SUBSYSTEM:CONSOLE</code></li>
</ul>
<p>_tWinMain &#x4E0E; _tmain &#x51FD;&#x6570;&#x58F0;&#x660E;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp">Int WINAPI <span class="token function">_tWinMain</span><span class="token punctuation">(</span>
    HINSTANCE hInstanceExe<span class="token punctuation">,</span>
    HINSTANCE<span class="token punctuation">,</span>
    PTSTR pszCmdLine<span class="token punctuation">,</span>
    <span class="token keyword">int</span> nCmdShow<span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token keyword">int</span> <span class="token function">_tmain</span><span class="token punctuation">(</span>
    <span class="token keyword">int</span> argc<span class="token punctuation">,</span>
    TCHAR <span class="token operator">*</span>argv<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    TCHAR <span class="token operator">*</span>envp<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</pre><table>
<thead>
<tr>
<th>&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x7C7B;&#x578B;</th>
<th>&#x5165;&#x53E3;&#x70B9;&#x51FD;&#x6570;</th>
<th>&#x5D4C;&#x5165;&#x53EF;&#x6267;&#x884C;&#x6587;&#x4EF6;&#x7684;&#x542F;&#x52A8;&#x51FD;&#x6570;</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x5904;&#x7406;ANSI&#x5B57;&#x7B26;&#xFF08;&#x4E32;&#xFF09;&#x7684;GUI&#x5E94;&#x7528;&#x7A0B;&#x5E8F;</td>
<td>_tWinMain(WinMain)</td>
<td>WinMainCRTSartup</td>
</tr>
<tr>
<td>&#x5904;&#x7406;Unicode&#x5B57;&#x7B26;&#xFF08;&#x4E32;&#xFF09;&#x7684;GUI&#x5E94;&#x7528;&#x7A0B;&#x5E8F;</td>
<td>_tWinMain(wWinMain)</td>
<td>wWinMainCRTSartup</td>
</tr>
<tr>
<td>&#x5904;&#x7406;ANSI&#x5B57;&#x7B26;&#xFF08;&#x4E32;&#xFF09;&#x7684;CUI&#x5E94;&#x7528;&#x7A0B;&#x5E8F;</td>
<td>_tmain(Main)</td>
<td>mainCRTSartup</td>
</tr>
<tr>
<td>&#x5904;&#x7406;Unicode&#x5B57;&#x7B26;&#xFF08;&#x4E32;&#xFF09;&#x7684;CUI&#x5E94;&#x7528;&#x7A0B;&#x5E8F;</td>
<td>_tmain(wMain)</td>
<td>wmainCRTSartup</td>
</tr>
<tr>
<td>&#x52A8;&#x6001;&#x94FE;&#x63A5;&#x5E93;&#xFF08;Dynamic-Link Library&#xFF09;</td>
<td>DllMain</td>
<td>_DllMainCRTStartup</td>
</tr>
</tbody>
</table>
<h3 class="mume-header" id="windows-%E7%9A%84%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5%E5%BA%93dynamic-link-library">Windows &#x7684;&#x52A8;&#x6001;&#x94FE;&#x63A5;&#x5E93;&#xFF08;Dynamic-Link Library&#xFF09;</h3>

<blockquote>
<p>&#x90E8;&#x5206;&#x77E5;&#x8BC6;&#x70B9;&#x6765;&#x81EA;&#x300A;Windows &#x6838;&#x5FC3;&#x7F16;&#x7A0B;&#xFF08;&#x7B2C;&#x4E94;&#x7248;&#xFF09;&#x300B;</p>
</blockquote>
<h4 class="mume-header" id="%E7%94%A8%E5%A4%84">&#x7528;&#x5904;</h4>

<ul>
<li>&#x6269;&#x5C55;&#x4E86;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x7684;&#x7279;&#x6027;</li>
<li>&#x7B80;&#x5316;&#x4E86;&#x9879;&#x76EE;&#x7BA1;&#x7406;</li>
<li>&#x6709;&#x52A9;&#x4E8E;&#x8282;&#x7701;&#x5185;&#x5B58;</li>
<li>&#x4FC3;&#x8FDB;&#x4E86;&#x8D44;&#x6E90;&#x7684;&#x5171;&#x4EAB;</li>
<li>&#x4FC3;&#x8FDB;&#x4E86;&#x672C;&#x5730;&#x5316;</li>
<li>&#x6709;&#x52A9;&#x4E8E;&#x89E3;&#x51B3;&#x5E73;&#x53F0;&#x95F4;&#x7684;&#x5DEE;&#x5F02;</li>
<li>&#x53EF;&#x4EE5;&#x7528;&#x4E8E;&#x7279;&#x6B8A;&#x76EE;&#x7684;</li>
</ul>
<h4 class="mume-header" id="%E6%B3%A8%E6%84%8F">&#x6CE8;&#x610F;</h4>

<ul>
<li>&#x521B;&#x5EFA; DLL&#xFF0C;&#x4E8B;&#x5B9E;&#x4E0A;&#x662F;&#x5728;&#x521B;&#x5EFA;&#x53EF;&#x4F9B;&#x4E00;&#x4E2A;&#x53EF;&#x6267;&#x884C;&#x6A21;&#x5757;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;</li>
<li>&#x5F53;&#x4E00;&#x4E2A;&#x6A21;&#x5757;&#x63D0;&#x4F9B;&#x4E00;&#x4E2A;&#x5185;&#x5B58;&#x5206;&#x914D;&#x51FD;&#x6570;&#xFF08;malloc&#x3001;new&#xFF09;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5B83;&#x5FC5;&#x987B;&#x540C;&#x65F6;&#x63D0;&#x4F9B;&#x53E6;&#x4E00;&#x4E2A;&#x5185;&#x5B58;&#x91CA;&#x653E;&#x51FD;&#x6570;&#xFF08;free&#x3001;delete&#xFF09;</li>
<li>&#x5728;&#x4F7F;&#x7528; C &#x548C; C++ &#x6DF7;&#x7F16;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x8981;&#x4F7F;&#x7528; extern &quot;C&quot; &#x4FEE;&#x9970;&#x7B26;</li>
<li>&#x4E00;&#x4E2A; DLL &#x53EF;&#x4EE5;&#x5BFC;&#x51FA;&#x51FD;&#x6570;&#x3001;&#x53D8;&#x91CF;&#xFF08;&#x907F;&#x514D;&#x5BFC;&#x51FA;&#xFF09;&#x3001;C++ &#x7C7B;&#xFF08;&#x5BFC;&#x51FA;&#x5BFC;&#x5165;&#x9700;&#x8981;&#x540C;&#x7F16;&#x8BD1;&#x5668;&#xFF0C;&#x5426;&#x5219;&#x907F;&#x514D;&#x5BFC;&#x51FA;&#xFF09;</li>
<li>DLL &#x6A21;&#x5757;&#xFF1A;cpp &#x6587;&#x4EF6;&#x4E2D;&#x7684; __declspec(dllexport) &#x5199;&#x5728; include &#x5934;&#x6587;&#x4EF6;&#x4E4B;&#x524D;</li>
<li>&#x8C03;&#x7528; DLL &#x7684;&#x53EF;&#x6267;&#x884C;&#x6A21;&#x5757;&#xFF1A;cpp &#x6587;&#x4EF6;&#x7684; __declspec(dllimport) &#x4E4B;&#x524D;&#x4E0D;&#x5E94;&#x8BE5;&#x5B9A;&#x4E49; MYLIBAPI</li>
</ul>
<h4 class="mume-header" id="%E5%8A%A0%E8%BD%BD-windows-%E7%A8%8B%E5%BA%8F%E7%9A%84%E6%90%9C%E7%B4%A2%E9%A1%BA%E5%BA%8F">&#x52A0;&#x8F7D; Windows &#x7A0B;&#x5E8F;&#x7684;&#x641C;&#x7D22;&#x987A;&#x5E8F;</h4>

<ol>
<li>&#x5305;&#x542B;&#x53EF;&#x6267;&#x884C;&#x6587;&#x4EF6;&#x7684;&#x76EE;&#x5F55;</li>
<li>Windows &#x7684;&#x7CFB;&#x7EDF;&#x76EE;&#x5F55;&#xFF0C;&#x53EF;&#x4EE5;&#x901A;&#x8FC7; GetSystemDirectory &#x5F97;&#x5230;</li>
<li>16 &#x4F4D;&#x7684;&#x7CFB;&#x7EDF;&#x76EE;&#x5F55;&#xFF0C;&#x5373; Windows &#x76EE;&#x5F55;&#x4E2D;&#x7684; System &#x5B50;&#x76EE;&#x5F55;</li>
<li>Windows &#x76EE;&#x5F55;&#xFF0C;&#x53EF;&#x4EE5;&#x901A;&#x8FC7; GetWindowsDirectory &#x5F97;&#x5230;</li>
<li>&#x8FDB;&#x7A0B;&#x7684;&#x5F53;&#x524D;&#x76EE;&#x5F55;</li>
<li>PATH &#x73AF;&#x5883;&#x53D8;&#x91CF;&#x4E2D;&#x6240;&#x5217;&#x51FA;&#x7684;&#x76EE;&#x5F55;</li>
</ol>
<h4 class="mume-header" id="dll-%E5%85%A5%E5%8F%A3%E5%87%BD%E6%95%B0">DLL &#x5165;&#x53E3;&#x51FD;&#x6570;</h4>

<p>DllMain &#x51FD;&#x6570;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp">BOOL WINAPI <span class="token function">DllMain</span><span class="token punctuation">(</span>HINSTANCE hinstDLL<span class="token punctuation">,</span> DWORD fdwReason<span class="token punctuation">,</span> LPVOID lpvReserved<span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    <span class="token keyword">switch</span><span class="token punctuation">(</span>fdwReason<span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
    <span class="token keyword">case</span> DLL_PROCESS_ATTACH<span class="token operator">:</span>
        <span class="token comment">// &#x7B2C;&#x4E00;&#x6B21;&#x5C06;&#x4E00;&#x4E2A;DLL&#x6620;&#x5C04;&#x5230;&#x8FDB;&#x7A0B;&#x5730;&#x5740;&#x7A7A;&#x95F4;&#x65F6;&#x8C03;&#x7528;</span>
        <span class="token comment">// The DLL is being mapped into the process&apos; address space.</span>
        <span class="token keyword">break</span><span class="token punctuation">;</span>
    <span class="token keyword">case</span> DLL_THREAD_ATTACH<span class="token operator">:</span>
        <span class="token comment">// &#x5F53;&#x8FDB;&#x7A0B;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x7528;&#x4E8E;&#x544A;&#x8BC9;DLL&#x6267;&#x884C;&#x4E0E;&#x7EBF;&#x7A0B;&#x76F8;&#x5173;&#x7684;&#x521D;&#x59CB;&#x5316;&#xFF08;&#x975E;&#x4E3B;&#x7EBF;&#x7A0B;&#x6267;&#x884C;&#xFF09;</span>
        <span class="token comment">// A thread is bing created.</span>
        <span class="token keyword">break</span><span class="token punctuation">;</span>
    <span class="token keyword">case</span> DLL_THREAD_DETACH<span class="token operator">:</span>
        <span class="token comment">// &#x7CFB;&#x7EDF;&#x8C03;&#x7528; ExitThread &#x7EBF;&#x7A0B;&#x9000;&#x51FA;&#x524D;&#xFF0C;&#x5373;&#x5C06;&#x7EC8;&#x6B62;&#x7684;&#x7EBF;&#x7A0B;&#x901A;&#x8FC7;&#x544A;&#x8BC9;DLL&#x6267;&#x884C;&#x4E0E;&#x7EBF;&#x7A0B;&#x76F8;&#x5173;&#x7684;&#x6E05;&#x7406;</span>
        <span class="token comment">// A thread is exiting cleanly.</span>
        <span class="token keyword">break</span><span class="token punctuation">;</span>
    <span class="token keyword">case</span> DLL_PROCESS_DETACH<span class="token operator">:</span>
        <span class="token comment">// &#x5C06;&#x4E00;&#x4E2A;DLL&#x4ECE;&#x8FDB;&#x7A0B;&#x7684;&#x5730;&#x5740;&#x7A7A;&#x95F4;&#x65F6;&#x8C03;&#x7528;</span>
        <span class="token comment">// The DLL is being unmapped from the process&apos; address space.</span>
        <span class="token keyword">break</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">return</span> <span class="token punctuation">(</span>TRUE<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Used only for DLL_PROCESS_ATTACH</span>
<span class="token punctuation">}</span>
</pre><h4 class="mume-header" id="%E8%BD%BD%E5%85%A5%E5%8D%B8%E8%BD%BD%E5%BA%93">&#x8F7D;&#x5165;&#x5378;&#x8F7D;&#x5E93;</h4>

<p>LoadLibrary&#x3001;LoadLibraryExA&#x3001;LoadPackagedLibrary&#x3001;FreeLibrary&#x3001;FreeLibraryAndExitThread &#x51FD;&#x6570;&#x58F0;&#x660E;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token comment">// &#x8F7D;&#x5165;&#x5E93;</span>
HMODULE WINAPI <span class="token function">LoadLibrary</span><span class="token punctuation">(</span>
  _In_ LPCTSTR lpFileName
<span class="token punctuation">)</span><span class="token punctuation">;</span>
HMODULE <span class="token function">LoadLibraryExA</span><span class="token punctuation">(</span>
  LPCSTR lpLibFileName<span class="token punctuation">,</span>
  HANDLE hFile<span class="token punctuation">,</span>
  DWORD  dwFlags
<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// &#x82E5;&#x8981;&#x5728;&#x901A;&#x7528; Windows &#x5E73;&#x53F0;&#xFF08;UWP&#xFF09;&#x5E94;&#x7528;&#x4E2D;&#x52A0;&#x8F7D; Win32 DLL&#xFF0C;&#x9700;&#x8981;&#x8C03;&#x7528; LoadPackagedLibrary&#xFF0C;&#x800C;&#x4E0D;&#x662F; LoadLibrary &#x6216; LoadLibraryEx</span>
HMODULE <span class="token function">LoadPackagedLibrary</span><span class="token punctuation">(</span>
  LPCWSTR lpwLibFileName<span class="token punctuation">,</span>
  DWORD   Reserved
<span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token comment">// &#x5378;&#x8F7D;&#x5E93;</span>
BOOL WINAPI <span class="token function">FreeLibrary</span><span class="token punctuation">(</span>
  _In_ HMODULE hModule
<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// &#x5378;&#x8F7D;&#x5E93;&#x548C;&#x9000;&#x51FA;&#x7EBF;&#x7A0B;</span>
VOID WINAPI <span class="token function">FreeLibraryAndExitThread</span><span class="token punctuation">(</span>
  _In_ HMODULE hModule<span class="token punctuation">,</span>
  _In_ DWORD   dwExitCode
<span class="token punctuation">)</span><span class="token punctuation">;</span>
</pre><h4 class="mume-header" id="%E6%98%BE%E7%A4%BA%E5%9C%B0%E9%93%BE%E6%8E%A5%E5%88%B0%E5%AF%BC%E5%87%BA%E7%AC%A6%E5%8F%B7">&#x663E;&#x793A;&#x5730;&#x94FE;&#x63A5;&#x5230;&#x5BFC;&#x51FA;&#x7B26;&#x53F7;</h4>

<p>GetProcAddress &#x51FD;&#x6570;&#x58F0;&#x660E;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp">FARPROC <span class="token function">GetProcAddress</span><span class="token punctuation">(</span>
  HMODULE hInstDll<span class="token punctuation">,</span>
  PCSTR pszSymbolName  <span class="token comment">// &#x53EA;&#x80FD;&#x63A5;&#x53D7; ANSI &#x5B57;&#x7B26;&#x4E32;&#xFF0C;&#x4E0D;&#x80FD;&#x662F; Unicode</span>
<span class="token punctuation">)</span><span class="token punctuation">;</span>
</pre><h4 class="mume-header" id="dumpbinexe-%E6%9F%A5%E7%9C%8B-dll-%E4%BF%A1%E6%81%AF">DumpBin.exe &#x67E5;&#x770B; DLL &#x4FE1;&#x606F;</h4>

<p>&#x5728; <code>VS &#x7684;&#x5F00;&#x53D1;&#x4EBA;&#x5458;&#x547D;&#x4EE4;&#x63D0;&#x793A;&#x7B26;</code> &#x4F7F;&#x7528; <code>DumpBin.exe</code> &#x53EF;&#x67E5;&#x770B; DLL &#x5E93;&#x7684;&#x5BFC;&#x51FA;&#x6BB5;&#xFF08;&#x5BFC;&#x51FA;&#x7684;&#x53D8;&#x91CF;&#x3001;&#x51FD;&#x6570;&#x3001;&#x7C7B;&#x540D;&#x7684;&#x7B26;&#x53F7;&#xFF09;&#x3001;&#x76F8;&#x5BF9;&#x865A;&#x62DF;&#x5730;&#x5740;&#xFF08;RVA&#xFF0C;relative virtual address&#xFF09;&#x3002;&#x5982;&#xFF1A;</p>
<pre data-role="codeBlock" data-info class="language-"><code>DUMPBIN -exports D:\mydll.dll
</code></pre><h4 class="mume-header" id="loadlibrary-%E4%B8%8E-freelibrary-%E6%B5%81%E7%A8%8B%E5%9B%BE">LoadLibrary &#x4E0E; FreeLibrary &#x6D41;&#x7A0B;&#x56FE;</h4>

<p>LoadLibrary &#x4E0E; FreeLibrary &#x6D41;&#x7A0B;&#x56FE;</p>
<h5 class="mume-header" id="loadlibrary">LoadLibrary</h5>

<p><img src="https://gitee.com/huihut/interview/raw/master/images/WindowsLoadLibrary.png" alt="WindowsLoadLibrary"></p>
<h5 class="mume-header" id="freelibrary">FreeLibrary</h5>

<p><img src="https://gitee.com/huihut/interview/raw/master/images/WindowsFreeLibrary.png" alt="WindowsFreeLibrary"></p>
<h4 class="mume-header" id="dll-%E5%BA%93%E7%9A%84%E7%BC%96%E5%86%99%E5%AF%BC%E5%87%BA%E4%B8%80%E4%B8%AA-dll-%E6%A8%A1%E5%9D%97">DLL &#x5E93;&#x7684;&#x7F16;&#x5199;&#xFF08;&#x5BFC;&#x51FA;&#x4E00;&#x4E2A; DLL &#x6A21;&#x5757;&#xFF09;</h4>

<p>DLL &#x5E93;&#x7684;&#x7F16;&#x5199;&#xFF08;&#x5BFC;&#x51FA;&#x4E00;&#x4E2A; DLL &#x6A21;&#x5757;&#xFF09;<br>
DLL &#x5934;&#x6587;&#x4EF6;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token comment">// MyLib.h</span>

<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">ifdef</span> <span class="token expression">MYLIBAPI</span></span>

<span class="token comment">// MYLIBAPI &#x5E94;&#x8BE5;&#x5728;&#x5168;&#x90E8; DLL &#x6E90;&#x6587;&#x4EF6;&#x7684; include &quot;Mylib.h&quot; &#x4E4B;&#x524D;&#x88AB;&#x5B9A;&#x4E49;</span>
<span class="token comment">// &#x5168;&#x90E8;&#x51FD;&#x6570;/&#x53D8;&#x91CF;&#x6B63;&#x5728;&#x88AB;&#x5BFC;&#x51FA;</span>

<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">else</span></span>

<span class="token comment">// &#x8FD9;&#x4E2A;&#x5934;&#x6587;&#x4EF6;&#x88AB;&#x4E00;&#x4E2A;exe&#x6E90;&#x4EE3;&#x7801;&#x6A21;&#x5757;&#x5305;&#x542B;&#xFF0C;&#x610F;&#x5473;&#x7740;&#x5168;&#x90E8;&#x51FD;&#x6570;/&#x53D8;&#x91CF;&#x88AB;&#x5BFC;&#x5165;</span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">MYLIBAPI</span> <span class="token expression"><span class="token keyword">extern</span> </span><span class="token string">&quot;C&quot;</span> <span class="token expression"><span class="token function">__declspec</span><span class="token punctuation">(</span>dllimport<span class="token punctuation">)</span></span></span>

<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">endif</span></span>

<span class="token comment">// &#x8FD9;&#x91CC;&#x5B9A;&#x4E49;&#x4EFB;&#x4F55;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x548C;&#x7B26;&#x53F7;</span>

<span class="token comment">// &#x5B9A;&#x4E49;&#x5BFC;&#x51FA;&#x7684;&#x53D8;&#x91CF;&#xFF08;&#x907F;&#x514D;&#x5BFC;&#x51FA;&#x53D8;&#x91CF;&#xFF09;</span>
MYLIBAPI <span class="token keyword">int</span> g_nResult<span class="token punctuation">;</span>

<span class="token comment">// &#x5B9A;&#x4E49;&#x5BFC;&#x51FA;&#x51FD;&#x6570;&#x539F;&#x578B;</span>
MYLIBAPI <span class="token keyword">int</span> <span class="token function">Add</span><span class="token punctuation">(</span><span class="token keyword">int</span> nLeft<span class="token punctuation">,</span> <span class="token keyword">int</span> nRight<span class="token punctuation">)</span><span class="token punctuation">;</span>
</pre><p>DLL &#x6E90;&#x6587;&#x4EF6;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token comment">// MyLibFile1.cpp</span>

<span class="token comment">// &#x5305;&#x542B;&#x6807;&#x51C6;Windows&#x548C;C&#x8FD0;&#x884C;&#x65F6;&#x5934;&#x6587;&#x4EF6;</span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;windows.h&gt;</span></span>

<span class="token comment">// DLL&#x6E90;&#x7801;&#x6587;&#x4EF6;&#x5BFC;&#x51FA;&#x7684;&#x51FD;&#x6570;&#x548C;&#x53D8;&#x91CF;</span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">MYLIBAPI</span> <span class="token expression"><span class="token keyword">extern</span> </span><span class="token string">&quot;C&quot;</span> <span class="token expression"><span class="token function">__declspec</span><span class="token punctuation">(</span>dllexport<span class="token punctuation">)</span></span></span>

<span class="token comment">// &#x5305;&#x542B;&#x5BFC;&#x51FA;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x3001;&#x7B26;&#x53F7;&#x3001;&#x51FD;&#x6570;&#x3001;&#x53D8;&#x91CF;</span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&quot;MyLib.h&quot;</span></span>

<span class="token comment">// &#x5C06;&#x6B64;DLL&#x6E90;&#x4EE3;&#x7801;&#x6587;&#x4EF6;&#x7684;&#x4EE3;&#x7801;&#x653E;&#x5728;&#x6B64;&#x5904;</span>
<span class="token keyword">int</span> g_nResult<span class="token punctuation">;</span>

<span class="token keyword">int</span> <span class="token function">Add</span><span class="token punctuation">(</span><span class="token keyword">int</span> nLeft<span class="token punctuation">,</span> <span class="token keyword">int</span> nRight<span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    g_nResult <span class="token operator">=</span> nLeft <span class="token operator">+</span> nRight<span class="token punctuation">;</span>
    <span class="token keyword">return</span> g_nResult<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</pre><h4 class="mume-header" id="dll-%E5%BA%93%E7%9A%84%E4%BD%BF%E7%94%A8%E8%BF%90%E8%A1%8C%E6%97%B6%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5-dll">DLL &#x5E93;&#x7684;&#x4F7F;&#x7528;&#xFF08;&#x8FD0;&#x884C;&#x65F6;&#x52A8;&#x6001;&#x94FE;&#x63A5; DLL&#xFF09;</h4>

<p>DLL &#x5E93;&#x7684;&#x4F7F;&#x7528;&#xFF08;&#x8FD0;&#x884C;&#x65F6;&#x52A8;&#x6001;&#x94FE;&#x63A5; DLL&#xFF09;</p>
<pre data-role="codeBlock" data-info="cpp" class="language-cpp"><span class="token comment">// A simple program that uses LoadLibrary and </span>
<span class="token comment">// GetProcAddress to access myPuts from Myputs.dll. </span>
 
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;windows.h&gt;</span> </span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;stdio.h&gt;</span> </span>
 
<span class="token keyword">typedef</span> <span class="token keyword">int</span> <span class="token punctuation">(</span>__cdecl <span class="token operator">*</span>MYPROC<span class="token punctuation">)</span><span class="token punctuation">(</span>LPWSTR<span class="token punctuation">)</span><span class="token punctuation">;</span> 
 
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span> <span class="token keyword">void</span> <span class="token punctuation">)</span> 
<span class="token punctuation">{</span> 
    HINSTANCE hinstLib<span class="token punctuation">;</span> 
    MYPROC ProcAdd<span class="token punctuation">;</span> 
    BOOL fFreeResult<span class="token punctuation">,</span> fRunTimeLinkSuccess <span class="token operator">=</span> FALSE<span class="token punctuation">;</span> 
 
    <span class="token comment">// Get a handle to the DLL module.</span>
 
    hinstLib <span class="token operator">=</span> <span class="token function">LoadLibrary</span><span class="token punctuation">(</span><span class="token function">TEXT</span><span class="token punctuation">(</span><span class="token string">&quot;MyPuts.dll&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 
 
    <span class="token comment">// If the handle is valid, try to get the function address.</span>
 
    <span class="token keyword">if</span> <span class="token punctuation">(</span>hinstLib <span class="token operator">!=</span> <span class="token constant">NULL</span><span class="token punctuation">)</span> 
    <span class="token punctuation">{</span> 
        ProcAdd <span class="token operator">=</span> <span class="token punctuation">(</span>MYPROC<span class="token punctuation">)</span> <span class="token function">GetProcAddress</span><span class="token punctuation">(</span>hinstLib<span class="token punctuation">,</span> <span class="token string">&quot;myPuts&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 
 
        <span class="token comment">// If the function address is valid, call the function.</span>
 
        <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">!=</span> ProcAdd<span class="token punctuation">)</span> 
        <span class="token punctuation">{</span>
            fRunTimeLinkSuccess <span class="token operator">=</span> TRUE<span class="token punctuation">;</span>
            <span class="token punctuation">(</span>ProcAdd<span class="token punctuation">)</span> <span class="token punctuation">(</span>L<span class="token string">&quot;Message sent to the DLL function\n&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 
        <span class="token punctuation">}</span>
        <span class="token comment">// Free the DLL module.</span>
 
        fFreeResult <span class="token operator">=</span> <span class="token function">FreeLibrary</span><span class="token punctuation">(</span>hinstLib<span class="token punctuation">)</span><span class="token punctuation">;</span> 
    <span class="token punctuation">}</span> 

    <span class="token comment">// If unable to call the DLL function, use an alternative.</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span> fRunTimeLinkSuccess<span class="token punctuation">)</span> 
        <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">&quot;Message printed from executable\n&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 

    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</pre><h3 class="mume-header" id="%E8%BF%90%E8%A1%8C%E5%BA%93runtime-library">&#x8FD0;&#x884C;&#x5E93;&#xFF08;Runtime Library&#xFF09;</h3>

<h4 class="mume-header" id="%E5%85%B8%E5%9E%8B%E7%A8%8B%E5%BA%8F%E8%BF%90%E8%A1%8C%E6%AD%A5%E9%AA%A4">&#x5178;&#x578B;&#x7A0B;&#x5E8F;&#x8FD0;&#x884C;&#x6B65;&#x9AA4;</h4>

<ol>
<li>&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x521B;&#x5EFA;&#x8FDB;&#x7A0B;&#xFF0C;&#x628A;&#x63A7;&#x5236;&#x6743;&#x4EA4;&#x7ED9;&#x7A0B;&#x5E8F;&#x7684;&#x5165;&#x53E3;&#xFF08;&#x5F80;&#x5F80;&#x662F;&#x8FD0;&#x884C;&#x5E93;&#x4E2D;&#x7684;&#x67D0;&#x4E2A;&#x5165;&#x53E3;&#x51FD;&#x6570;&#xFF09;</li>
<li>&#x5165;&#x53E3;&#x51FD;&#x6570;&#x5BF9;&#x8FD0;&#x884C;&#x5E93;&#x548C;&#x7A0B;&#x5E8F;&#x8FD0;&#x884C;&#x73AF;&#x5883;&#x8FDB;&#x884C;&#x521D;&#x59CB;&#x5316;&#xFF08;&#x5305;&#x62EC;&#x5806;&#x3001;I/O&#x3001;&#x7EBF;&#x7A0B;&#x3001;&#x5168;&#x5C40;&#x53D8;&#x91CF;&#x6784;&#x9020;&#x7B49;&#x7B49;&#xFF09;&#x3002;</li>
<li>&#x5165;&#x53E3;&#x51FD;&#x6570;&#x521D;&#x59CB;&#x5316;&#x540E;&#xFF0C;&#x8C03;&#x7528; main &#x51FD;&#x6570;&#xFF0C;&#x6B63;&#x5F0F;&#x5F00;&#x59CB;&#x6267;&#x884C;&#x7A0B;&#x5E8F;&#x4E3B;&#x4F53;&#x90E8;&#x5206;&#x3002;</li>
<li>main &#x51FD;&#x6570;&#x6267;&#x884C;&#x5B8C;&#x6BD5;&#x540E;&#xFF0C;&#x8FD4;&#x56DE;&#x5230;&#x5165;&#x53E3;&#x51FD;&#x6570;&#x8FDB;&#x884C;&#x6E05;&#x7406;&#x5DE5;&#x4F5C;&#xFF08;&#x5305;&#x62EC;&#x5168;&#x5C40;&#x53D8;&#x91CF;&#x6790;&#x6784;&#x3001;&#x5806;&#x9500;&#x6BC1;&#x3001;&#x5173;&#x95ED;I/O&#x7B49;&#xFF09;&#xFF0C;&#x7136;&#x540E;&#x8FDB;&#x884C;&#x7CFB;&#x7EDF;&#x8C03;&#x7528;&#x7ED3;&#x675F;&#x8FDB;&#x7A0B;&#x3002;</li>
</ol>
<blockquote>
<p>&#x4E00;&#x4E2A;&#x7A0B;&#x5E8F;&#x7684; I/O &#x6307;&#x4EE3;&#x7A0B;&#x5E8F;&#x4E0E;&#x5916;&#x754C;&#x7684;&#x4EA4;&#x4E92;&#xFF0C;&#x5305;&#x62EC;&#x6587;&#x4EF6;&#x3001;&#x7BA1;&#x7A0B;&#x3001;&#x7F51;&#x7EDC;&#x3001;&#x547D;&#x4EE4;&#x884C;&#x3001;&#x4FE1;&#x53F7;&#x7B49;&#x3002;&#x66F4;&#x5E7F;&#x4E49;&#x5730;&#x8BB2;&#xFF0C;I/O &#x6307;&#x4EE3;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7406;&#x89E3;&#x4E3A; &#x201C;&#x6587;&#x4EF6;&#x201D; &#x7684;&#x4E8B;&#x7269;&#x3002;</p>
</blockquote>
<h4 class="mume-header" id="glibc-%E5%85%A5%E5%8F%A3">glibc &#x5165;&#x53E3;</h4>

<p><code>_start -&gt; __libc_start_main -&gt; exit -&gt; _exit</code></p>
<p>&#x5176;&#x4E2D; <code>main(argc, argv, __environ)</code> &#x51FD;&#x6570;&#x5728; <code>__libc_start_main</code> &#x91CC;&#x6267;&#x884C;&#x3002;</p>
<h4 class="mume-header" id="msvc-crt-%E5%85%A5%E5%8F%A3">MSVC CRT &#x5165;&#x53E3;</h4>

<p><code>int mainCRTStartup(void)</code></p>
<p>&#x6267;&#x884C;&#x5982;&#x4E0B;&#x64CD;&#x4F5C;&#xFF1A;</p>
<ol>
<li>&#x521D;&#x59CB;&#x5316;&#x548C; OS &#x7248;&#x672C;&#x6709;&#x5173;&#x7684;&#x5168;&#x5C40;&#x53D8;&#x91CF;&#x3002;</li>
<li>&#x521D;&#x59CB;&#x5316;&#x5806;&#x3002;</li>
<li>&#x521D;&#x59CB;&#x5316; I/O&#x3002;</li>
<li>&#x83B7;&#x53D6;&#x547D;&#x4EE4;&#x884C;&#x53C2;&#x6570;&#x548C;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x3002;</li>
<li>&#x521D;&#x59CB;&#x5316; C &#x5E93;&#x7684;&#x4E00;&#x4E9B;&#x6570;&#x636E;&#x3002;</li>
<li>&#x8C03;&#x7528; main &#x5E76;&#x8BB0;&#x5F55;&#x8FD4;&#x56DE;&#x503C;&#x3002;</li>
<li>&#x68C0;&#x67E5;&#x9519;&#x8BEF;&#x5E76;&#x5C06; main &#x7684;&#x8FD4;&#x56DE;&#x503C;&#x8FD4;&#x56DE;&#x3002;</li>
</ol>
<h4 class="mume-header" id="c-%E8%AF%AD%E8%A8%80%E8%BF%90%E8%A1%8C%E5%BA%93crt">C &#x8BED;&#x8A00;&#x8FD0;&#x884C;&#x5E93;&#xFF08;CRT&#xFF09;</h4>

<p>&#x5927;&#x81F4;&#x5305;&#x542B;&#x5982;&#x4E0B;&#x529F;&#x80FD;&#xFF1A;</p>
<ul>
<li>&#x542F;&#x52A8;&#x4E0E;&#x9000;&#x51FA;&#xFF1A;&#x5305;&#x62EC;&#x5165;&#x53E3;&#x51FD;&#x6570;&#x53CA;&#x5165;&#x53E3;&#x51FD;&#x6570;&#x6240;&#x4F9D;&#x8D56;&#x7684;&#x5176;&#x4ED6;&#x51FD;&#x6570;&#x7B49;&#x3002;</li>
<li>&#x6807;&#x51C6;&#x51FD;&#x6570;&#xFF1A;&#x6709; C &#x8BED;&#x8A00;&#x6807;&#x51C6;&#x89C4;&#x5B9A;&#x7684;C&#x8BED;&#x8A00;&#x6807;&#x51C6;&#x5E93;&#x6240;&#x62E5;&#x6709;&#x7684;&#x51FD;&#x6570;&#x5B9E;&#x73B0;&#x3002;</li>
<li>I/O&#xFF1A;I/O &#x529F;&#x80FD;&#x7684;&#x5C01;&#x88C5;&#x548C;&#x5B9E;&#x73B0;&#x3002;</li>
<li>&#x5806;&#xFF1A;&#x5806;&#x7684;&#x5C01;&#x88C5;&#x548C;&#x5B9E;&#x73B0;&#x3002;</li>
<li>&#x8BED;&#x8A00;&#x5B9E;&#x73B0;&#xFF1A;&#x8BED;&#x8A00;&#x4E2D;&#x4E00;&#x4E9B;&#x7279;&#x6B8A;&#x529F;&#x80FD;&#x7684;&#x5B9E;&#x73B0;&#x3002;</li>
<li>&#x8C03;&#x8BD5;&#xFF1A;&#x5B9E;&#x73B0;&#x8C03;&#x8BD5;&#x529F;&#x80FD;&#x7684;&#x4EE3;&#x7801;&#x3002;</li>
</ul>
<h4 class="mume-header" id="c%E8%AF%AD%E8%A8%80%E6%A0%87%E5%87%86%E5%BA%93ansi-c">C&#x8BED;&#x8A00;&#x6807;&#x51C6;&#x5E93;&#xFF08;ANSI C&#xFF09;</h4>

<p>&#x5305;&#x542B;&#xFF1A;</p>
<ul>
<li>&#x6807;&#x51C6;&#x8F93;&#x5165;&#x8F93;&#x51FA;&#xFF08;stdio.h&#xFF09;</li>
<li>&#x6587;&#x4EF6;&#x64CD;&#x4F5C;&#xFF08;stdio.h&#xFF09;</li>
<li>&#x5B57;&#x7B26;&#x64CD;&#x4F5C;&#xFF08;ctype.h&#xFF09;</li>
<li>&#x5B57;&#x7B26;&#x4E32;&#x64CD;&#x4F5C;&#xFF08;string.h&#xFF09;</li>
<li>&#x6570;&#x5B66;&#x51FD;&#x6570;&#xFF08;math.h&#xFF09;</li>
<li>&#x8D44;&#x6E90;&#x7BA1;&#x7406;&#xFF08;stdlib.h&#xFF09;</li>
<li>&#x683C;&#x5F0F;&#x8F6C;&#x6362;&#xFF08;stdlib.h&#xFF09;</li>
<li>&#x65F6;&#x95F4;/&#x65E5;&#x671F;&#xFF08;time.h&#xFF09;</li>
<li>&#x65AD;&#x8A00;&#xFF08;assert.h&#xFF09;</li>
<li>&#x5404;&#x79CD;&#x7C7B;&#x578B;&#x4E0A;&#x7684;&#x5E38;&#x6570;&#xFF08;limits.h &amp; float.h&#xFF09;</li>
<li>&#x53D8;&#x957F;&#x53C2;&#x6570;&#xFF08;stdarg.h&#xFF09;</li>
<li>&#x975E;&#x5C40;&#x90E8;&#x8DF3;&#x8F6C;&#xFF08;setjmp.h&#xFF09;</li>
</ul>
<p><a id="books" href></a></p>
<h2 class="mume-header" id="%E4%B9%A6%E7%B1%8D">&#x1F4DA; &#x4E66;&#x7C4D;</h2>

<blockquote>
<p><a href="https://github.com/huihut/CS-Books">huihut/CS-Books</a>&#xFF1A;&#x1F4DA; Computer Science Books &#x8BA1;&#x7B97;&#x673A;&#x6280;&#x672F;&#x7C7B;&#x4E66;&#x7C4D; PDF</p>
</blockquote>
<h3 class="mume-header" id="%E8%AF%AD%E8%A8%80">&#x8BED;&#x8A00;</h3>

<ul>
<li>&#x300A;C++ Primer&#x300B;</li>
<li>&#x300A;Effective C++&#x300B;</li>
<li>&#x300A;More Effective C++&#x300B;</li>
<li>&#x300A;&#x6DF1;&#x5EA6;&#x63A2;&#x7D22; C++ &#x5BF9;&#x8C61;&#x6A21;&#x578B;&#x300B;</li>
<li>&#x300A;&#x6DF1;&#x5165;&#x7406;&#x89E3; C++11&#x300B;</li>
<li>&#x300A;STL &#x6E90;&#x7801;&#x5256;&#x6790;&#x300B;</li>
</ul>
<h3 class="mume-header" id="%E7%AE%97%E6%B3%95-1">&#x7B97;&#x6CD5;</h3>

<ul>
<li>&#x300A;&#x5251;&#x6307; Offer&#x300B;</li>
<li>&#x300A;&#x7F16;&#x7A0B;&#x73E0;&#x7391;&#x300B;</li>
<li>&#x300A;&#x7A0B;&#x5E8F;&#x5458;&#x9762;&#x8BD5;&#x5B9D;&#x5178;&#x300B;</li>
</ul>
<h3 class="mume-header" id="%E7%B3%BB%E7%BB%9F">&#x7CFB;&#x7EDF;</h3>

<ul>
<li>&#x300A;&#x6DF1;&#x5165;&#x7406;&#x89E3;&#x8BA1;&#x7B97;&#x673A;&#x7CFB;&#x7EDF;&#x300B;</li>
<li>&#x300A;Windows &#x6838;&#x5FC3;&#x7F16;&#x7A0B;&#x300B;</li>
<li>&#x300A;Unix &#x73AF;&#x5883;&#x9AD8;&#x7EA7;&#x7F16;&#x7A0B;&#x300B;</li>
</ul>
<h3 class="mume-header" id="%E7%BD%91%E7%BB%9C">&#x7F51;&#x7EDC;</h3>

<ul>
<li>&#x300A;Unix &#x7F51;&#x7EDC;&#x7F16;&#x7A0B;&#x300B;</li>
<li>&#x300A;TCP/IP &#x8BE6;&#x89E3;&#x300B;</li>
</ul>
<h3 class="mume-header" id="%E5%85%B6%E4%BB%96-1">&#x5176;&#x4ED6;</h3>

<ul>
<li>&#x300A;&#x7A0B;&#x5E8F;&#x5458;&#x7684;&#x81EA;&#x6211;&#x4FEE;&#x517B;&#x300B;</li>
</ul>
<p><a id="cc-development-direction" href></a></p>
<h2 class="mume-header" id="cc-%E5%8F%91%E5%B1%95%E6%96%B9%E5%90%91">&#x1F531; C/C++ &#x53D1;&#x5C55;&#x65B9;&#x5411;</h2>

<blockquote>
<p>C/C++ &#x53D1;&#x5C55;&#x65B9;&#x5411;&#x751A;&#x5E7F;&#xFF0C;&#x5305;&#x62EC;&#x4E0D;&#x9650;&#x4E8E;&#x4EE5;&#x4E0B;&#x65B9;&#x5411;&#xFF0C; &#x4EE5;&#x4E0B;&#x5217;&#x4E3E;&#x4E00;&#x4E9B;&#x5927;&#x5382;&#x6821;&#x62DB;&#x5C97;&#x4F4D;&#x8981;&#x6C42;&#x3002;</p>
</blockquote>
<h3 class="mume-header" id="%E5%90%8E%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8">&#x540E;&#x53F0;/&#x670D;&#x52A1;&#x5668;</h3>

<p>&#x3010;&#x540E;&#x53F0;&#x5F00;&#x53D1;&#x3011;</p>
<ul>
<li>&#x7F16;&#x7A0B;&#x57FA;&#x672C;&#x529F;&#x624E;&#x5B9E;&#xFF0C;&#x638C;&#x63E1; C/C++/JAVA &#x7B49;&#x5F00;&#x53D1;&#x8BED;&#x8A00;&#x3001;&#x5E38;&#x7528;&#x7B97;&#x6CD5;&#x548C;&#x6570;&#x636E;&#x7ED3;&#x6784;&#xFF1B;</li>
<li>&#x719F;&#x6089; TCP/UDP &#x7F51;&#x7EDC;&#x534F;&#x8BAE;&#x53CA;&#x76F8;&#x5173;&#x7F16;&#x7A0B;&#x3001;&#x8FDB;&#x7A0B;&#x95F4;&#x901A;&#x8BAF;&#x7F16;&#x7A0B;&#xFF1B;</li>
<li>&#x4E86;&#x89E3; Python&#x3001;Shell&#x3001;Perl &#x7B49;&#x811A;&#x672C;&#x8BED;&#x8A00;&#xFF1B;</li>
<li>&#x4E86;&#x89E3; MYSQL &#x53CA; SQL &#x8BED;&#x8A00;&#x3001;&#x7F16;&#x7A0B;&#xFF0C;&#x4E86;&#x89E3; NoSQL, key-value &#x5B58;&#x50A8;&#x539F;&#x7406;&#xFF1B;</li>
<li>&#x5168;&#x9762;&#x3001;&#x624E;&#x5B9E;&#x7684;&#x8F6F;&#x4EF6;&#x77E5;&#x8BC6;&#x7ED3;&#x6784;&#xFF0C;&#x638C;&#x63E1;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x3001;&#x8F6F;&#x4EF6;&#x5DE5;&#x7A0B;&#x3001;&#x8BBE;&#x8BA1;&#x6A21;&#x5F0F;&#x3001;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x3001;&#x6570;&#x636E;&#x5E93;&#x7CFB;&#x7EDF;&#x3001;&#x7F51;&#x7EDC;&#x5B89;&#x5168;&#x7B49;&#x4E13;&#x4E1A;&#x77E5;&#x8BC6;&#xFF1B;</li>
<li>&#x4E86;&#x89E3;&#x5206;&#x5E03;&#x5F0F;&#x7CFB;&#x7EDF;&#x8BBE;&#x8BA1;&#x4E0E;&#x5F00;&#x53D1;&#x3001;&#x8D1F;&#x8F7D;&#x5747;&#x8861;&#x6280;&#x672F;&#xFF0C;&#x7CFB;&#x7EDF;&#x5BB9;&#x707E;&#x8BBE;&#x8BA1;&#xFF0C;&#x9AD8;&#x53EF;&#x7528;&#x7CFB;&#x7EDF;&#x7B49;&#x77E5;&#x8BC6;&#x3002;</li>
</ul>
<h3 class="mume-header" id="%E6%A1%8C%E9%9D%A2%E5%AE%A2%E6%88%B7%E7%AB%AF">&#x684C;&#x9762;&#x5BA2;&#x6237;&#x7AEF;</h3>

<p>&#x3010;PC &#x5BA2;&#x6237;&#x7AEF;&#x5F00;&#x53D1;&#x3011;</p>
<ul>
<li>&#x8BA1;&#x7B97;&#x673A;&#x8F6F;&#x4EF6;&#x76F8;&#x5173;&#x4E13;&#x4E1A;&#x672C;&#x79D1;&#x6216;&#x4EE5;&#x4E0A;&#x5B66;&#x5386;&#xFF0C;&#x70ED;&#x7231;&#x7F16;&#x7A0B;&#xFF0C;&#x57FA;&#x7840;&#x624E;&#x5B9E;&#xFF0C;&#x7406;&#x89E3;&#x7B97;&#x6CD5;&#x548C;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x76F8;&#x5173;&#x77E5;&#x8BC6;&#xFF1B;</li>
<li>&#x719F;&#x6089; windows &#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7684;&#x5185;&#x5B58;&#x7BA1;&#x7406;&#x3001;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x3001;&#x8FDB;&#x7A0B;&#x7EBF;&#x7A0B;&#x8C03;&#x5EA6;&#xFF1B;</li>
<li>&#x719F;&#x6089; MFC/windows &#x754C;&#x9762;&#x5B9E;&#x73B0;&#x673A;&#x5236;&#xFF0C;&#x719F;&#x7EC3;&#x4F7F;&#x7528; VC&#xFF0C;&#x7CBE;&#x901A; C/C++&#xFF0C;&#x719F;&#x7EC3;&#x4F7F;&#x7528; STL&#xFF0C;&#x4EE5;&#x53CA; Windows &#x4E0B;&#x7F51;&#x7EDC;&#x7F16;&#x7A0B;&#x7ECF;&#x9A8C;&#xFF1B;</li>
<li>&#x719F;&#x7EC3;&#x638C;&#x63E1; Windows &#x5BA2;&#x6237;&#x7AEF;&#x5F00;&#x53D1;&#x3001;&#x8C03;&#x8BD5;&#xFF0C;&#x6709; Windows &#x5E94;&#x7528;&#x8F6F;&#x4EF6;&#x5F00;&#x53D1;&#x7ECF;&#x9A8C;&#x4F18;&#x5148;&#xFF1B;</li>
<li>&#x5BF9;&#x4E8E;&#x521B;&#x65B0;&#x53CA;&#x89E3;&#x51B3;&#x5177;&#x6709;&#x6311;&#x6218;&#x6027;&#x7684;&#x95EE;&#x9898;&#x5145;&#x6EE1;&#x6FC0;&#x60C5;&#xFF0C;&#x5177;&#x6709;&#x826F;&#x597D;&#x7684;&#x7B97;&#x6CD5;&#x57FA;&#x7840;&#x53CA;&#x7CFB;&#x7EDF;&#x5206;&#x6790;&#x80FD;&#x529B;&#x3002;</li>
</ul>
<h3 class="mume-header" id="%E5%9B%BE%E5%BD%A2%E5%AD%A6%E6%B8%B8%E6%88%8Fvrar">&#x56FE;&#x5F62;&#x5B66;/&#x6E38;&#x620F;/VR/AR</h3>

<p>&#x3010;&#x6E38;&#x620F;&#x5BA2;&#x6237;&#x7AEF;&#x5F00;&#x53D1;&#x3011;</p>
<ul>
<li>&#x8BA1;&#x7B97;&#x673A;&#x79D1;&#x5B66;/&#x5DE5;&#x7A0B;&#x76F8;&#x5173;&#x4E13;&#x4E1A;&#x672C;&#x79D1;&#x6216;&#x4EE5;&#x4E0A;&#x5B66;&#x5386;&#xFF0C;&#x70ED;&#x7231;&#x7F16;&#x7A0B;&#xFF0C;&#x57FA;&#x7840;&#x624E;&#x5B9E;&#xFF0C;&#x7406;&#x89E3;&#x7B97;&#x6CD5;&#x3001;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x3001;&#x8F6F;&#x4EF6;&#x8BBE;&#x8BA1;&#x76F8;&#x5173;&#x77E5;&#x8BC6;&#xFF1B;</li>
<li>&#x81F3;&#x5C11;&#x638C;&#x63E1;&#x4E00;&#x79CD;&#x6E38;&#x620F;&#x5F00;&#x53D1;&#x5E38;&#x7528;&#x7684;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#xFF0C;&#x5177; C++/C# &#x7F16;&#x7A0B;&#x7ECF;&#x9A8C;&#x4F18;&#x5148;&#xFF1B;</li>
<li>&#x5177;&#x6E38;&#x620F;&#x5F15;&#x64CE;&#xFF08;&#x5982; Unity&#x3001;Unreal&#xFF09;&#x4F7F;&#x7528;&#x7ECF;&#x9A8C;&#x8005;&#x4F18;&#x5148;&#xFF1B;</li>
<li>&#x4E86;&#x89E3;&#x67D0;&#x65B9;&#x9762;&#x7684;&#x6E38;&#x620F;&#x5BA2;&#x6237;&#x7AEF;&#x6280;&#x672F;&#xFF08;&#x5982;&#x56FE;&#x5F62;&#x3001;&#x97F3;&#x9891;&#x3001;&#x52A8;&#x753B;&#x3001;&#x7269;&#x7406;&#x3001;&#x4EBA;&#x5DE5;&#x667A;&#x80FD;&#x3001;&#x7F51;&#x7EDC;&#x540C;&#x6B65;&#xFF09;&#x8005;&#x4F18;&#x5148;&#x8003;&#x8651;&#xFF1B;</li>
<li>&#x5BF9;&#x4E8E;&#x521B;&#x65B0;&#x53CA;&#x89E3;&#x51B3;&#x5177;&#x6709;&#x6311;&#x6218;&#x6027;&#x7684;&#x95EE;&#x9898;&#x5145;&#x6EE1;&#x6FC0;&#x60C5;&#xFF0C;&#x6709;&#x8F83;&#x5F3A;&#x7684;&#x5B66;&#x4E60;&#x80FD;&#x529B;&#x3001;&#x5206;&#x6790;&#x53CA;&#x89E3;&#x51B3;&#x95EE;&#x9898;&#x80FD;&#x529B;&#xFF0C;&#x5177;&#x5907;&#x826F;&#x597D;&#x7684;&#x56E2;&#x961F;&#x5408;&#x4F5C;&#x610F;&#x8BC6;&#xFF1B;</li>
<li>&#x5177;&#x9605;&#x8BFB;&#x82F1;&#x6587;&#x6280;&#x672F;&#x6587;&#x6863;&#x80FD;&#x529B;&#xFF1B;</li>
<li>&#x70ED;&#x7231;&#x6E38;&#x620F;&#x3002;</li>
</ul>
<h3 class="mume-header" id="%E6%B5%8B%E8%AF%95%E5%BC%80%E5%8F%91">&#x6D4B;&#x8BD5;&#x5F00;&#x53D1;</h3>

<p>&#x3010;&#x6D4B;&#x8BD5;&#x5F00;&#x53D1;&#x3011;</p>
<ul>
<li>&#x8BA1;&#x7B97;&#x673A;&#x6216;&#x76F8;&#x5173;&#x4E13;&#x4E1A;&#x672C;&#x79D1;&#x53CA;&#x4EE5;&#x4E0A;&#x5B66;&#x5386;&#xFF1B;</li>
<li>&#x4E00;&#x81F3;&#x4E24;&#x5E74;&#x7684; C/C++/Python &#x6216;&#x5176;&#x4ED6;&#x8BA1;&#x7B97;&#x673A;&#x8BED;&#x8A00;&#x7684;&#x7F16;&#x7A0B;&#x7ECF;&#x9A8C;&#xFF1B;</li>
<li>&#x5177;&#x5907;&#x64B0;&#x5199;&#x6D4B;&#x8BD5;&#x8BA1;&#x5212;&#x3001;&#x6D4B;&#x8BD5;&#x7528;&#x4F8B;&#x3001;&#x4EE5;&#x53CA;&#x5B9E;&#x73B0;&#x6027;&#x80FD;&#x548C;&#x5B89;&#x5168;&#x7B49;&#x6D4B;&#x8BD5;&#x7684;&#x80FD;&#x529B;&#xFF1B;</li>
<li>&#x5177;&#x5907;&#x5B9E;&#x73B0;&#x81EA;&#x52A8;&#x5316;&#x7CFB;&#x7EDF;&#x7684;&#x80FD;&#x529B;&#xFF1B;</li>
<li>&#x5177;&#x5907;&#x5B9A;&#x4F4D;&#x8C03;&#x67E5;&#x4EA7;&#x54C1;&#x7F3A;&#x9677;&#x80FD;&#x529B;&#x3001;&#x4EE5;&#x53CA;&#x4EE3;&#x7801;&#x7EA7;&#x522B;&#x8C03;&#x8BD5;&#x7F3A;&#x9677;&#x7684;&#x80FD;&#x529B;&#xFF1B;</li>
<li>&#x5DE5;&#x4F5C;&#x4E3B;&#x52A8;&#x79EF;&#x6781;&#xFF0C;&#x6709;&#x8D23;&#x4EFB;&#x5FC3;&#xFF0C;&#x5177;&#x6709;&#x826F;&#x597D;&#x7684;&#x56E2;&#x961F;&#x5408;&#x4F5C;&#x7CBE;&#x795E;&#x3002;</li>
</ul>
<h3 class="mume-header" id="%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E9%80%86%E5%90%91">&#x7F51;&#x7EDC;&#x5B89;&#x5168;/&#x9006;&#x5411;</h3>

<p>&#x3010;&#x5B89;&#x5168;&#x6280;&#x672F;&#x3011;</p>
<ul>
<li>&#x70ED;&#x7231;&#x4E92;&#x8054;&#x7F51;&#xFF0C;&#x5BF9;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x548C;&#x7F51;&#x7EDC;&#x5B89;&#x5168;&#x6709;&#x72C2;&#x70ED;&#x7684;&#x8FFD;&#x6C42;&#xFF0C;&#x4E13;&#x4E1A;&#x4E0D;&#x9650;&#xFF1B;</li>
<li>&#x719F;&#x6089;&#x6F0F;&#x6D1E;&#x6316;&#x6398;&#x3001;&#x7F51;&#x7EDC;&#x5B89;&#x5168;&#x653B;&#x9632;&#x6280;&#x672F;&#xFF0C;&#x4E86;&#x89E3;&#x5E38;&#x89C1;&#x9ED1;&#x5BA2;&#x653B;&#x51FB;&#x624B;&#x6CD5;&#xFF1B;</li>
<li>&#x638C;&#x63E1;&#x57FA;&#x672C;&#x5F00;&#x53D1;&#x80FD;&#x529B;&#xFF0C;&#x719F;&#x7EC3;&#x4F7F;&#x7528; C/C++ &#x8BED;&#x8A00;&#xFF1B;</li>
<li>&#x5BF9;&#x6570;&#x636E;&#x5E93;&#x3001;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x3001;&#x7F51;&#x7EDC;&#x539F;&#x7406;&#x6709;&#x8F83;&#x597D;&#x638C;&#x63E1;&#xFF1B;</li>
<li>&#x5177;&#x6709;&#x8F6F;&#x4EF6;&#x9006;&#x5411;&#xFF0C;&#x7F51;&#x7EDC;&#x5B89;&#x5168;&#x653B;&#x9632;&#x6216;&#x5B89;&#x5168;&#x7CFB;&#x7EDF;&#x5F00;&#x53D1;&#x7ECF;&#x9A8C;&#x8005;&#x4F18;&#x5148;&#x3002;</li>
</ul>
<h3 class="mume-header" id="%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%89%A9%E8%81%94%E7%BD%91">&#x5D4C;&#x5165;&#x5F0F;/&#x7269;&#x8054;&#x7F51;</h3>

<p>&#x3010;&#x5D4C;&#x5165;&#x5F0F;&#x5E94;&#x7528;&#x5F00;&#x53D1;&#x3011;</p>
<ul>
<li>&#x6709;&#x826F;&#x597D;&#x7684;&#x7F16;&#x7A0B;&#x57FA;&#x7840;&#xFF0C;&#x719F;&#x7EC3;&#x638C;&#x63E1; C/C++ &#x8BED;&#x8A00;&#xFF1B;</li>
<li>&#x638C;&#x63E1;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x3001;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x7B49;&#x8F6F;&#x4EF6;&#x5F00;&#x53D1;&#x5FC5;&#x5907;&#x77E5;&#x8BC6;&#xFF1B;</li>
<li>&#x5177;&#x5907;&#x8F83;&#x5F3A;&#x7684;&#x6C9F;&#x901A;&#x7406;&#x89E3;&#x80FD;&#x529B;&#x53CA;&#x826F;&#x597D;&#x7684;&#x56E2;&#x961F;&#x5408;&#x4F5C;&#x610F;&#x8BC6;&#xFF1B;</li>
<li>&#x6709; Linux/Android &#x7CFB;&#x7EDF;&#x5E73;&#x53F0;&#x7684;&#x5F00;&#x53D1;&#x7ECF;&#x9A8C;&#x8005;&#x4F18;&#x5148;&#x3002;</li>
</ul>
<h3 class="mume-header" id="%E9%9F%B3%E8%A7%86%E9%A2%91%E6%B5%81%E5%AA%92%E4%BD%93sdk">&#x97F3;&#x89C6;&#x9891;/&#x6D41;&#x5A92;&#x4F53;/SDK</h3>

<p>&#x3010;&#x97F3;&#x89C6;&#x9891;&#x7F16;&#x89E3;&#x7801;&#x3011;</p>
<ol>
<li>&#x7855;&#x58EB;&#x53CA;&#x4EE5;&#x4E0A;&#x5B66;&#x5386;&#xFF0C;&#x8BA1;&#x7B97;&#x673A;&#x3001;&#x4FE1;&#x53F7;&#x5904;&#x7406;&#x3001;&#x6570;&#x5B66;&#x3001;&#x4FE1;&#x606F;&#x7C7B;&#x53CA;&#x76F8;&#x5173;&#x4E13;&#x4E1A;&#x548C;&#x65B9;&#x5411;&#xFF1B;</li>
<li>&#x89C6;&#x9891;&#x7F16;&#x89E3;&#x7801;&#x57FA;&#x7840;&#x624E;&#x5B9E;&#xFF0C;&#x719F;&#x5E38;&#x7528;&#x7684; HEVC &#x6216; H264&#xFF0C;&#x6709;&#x8F83;&#x597D;&#x7684;&#x6570;&#x5B57;&#x4FE1;&#x53F7;&#x5904;&#x7406;&#x57FA;&#x7840;&#xFF1B;</li>
<li>&#x638C;&#x63E1; C/C++&#xFF0C;&#x4EE3;&#x7801;&#x80FD;&#x529B;&#x5F3A;, &#x719F;&#x6089;&#x4E00;&#x79CD;&#x6C47;&#x7F16;&#x8BED;&#x8A00;&#x5C24;&#x4F73;&#xFF1B;</li>
<li>&#x8F83;&#x5F3A;&#x7684;&#x82F1;&#x6587;&#x6587;&#x732E;&#x9605;&#x8BFB;&#x80FD;&#x529B;&#xFF1B;</li>
<li>&#x5B66;&#x4E60;&#x80FD;&#x529B;&#x5F3A;&#xFF0C;&#x5177;&#x6709;&#x56E2;&#x961F;&#x534F;&#x4F5C;&#x7CBE;&#x795E;&#xFF0C;&#x6709;&#x8F83;&#x5F3A;&#x7684;&#x6297;&#x538B;&#x80FD;&#x529B;&#x3002;</li>
</ol>
<h3 class="mume-header" id="%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0">&#x8BA1;&#x7B97;&#x673A;&#x89C6;&#x89C9;/&#x673A;&#x5668;&#x5B66;&#x4E60;</h3>

<p>&#x3010;&#x8BA1;&#x7B97;&#x673A;&#x89C6;&#x89C9;&#x7814;&#x7A76;&#x3011;</p>
<ul>
<li>&#x8BA1;&#x7B97;&#x673A;&#x3001;&#x5E94;&#x7528;&#x6570;&#x5B66;&#x3001;&#x6A21;&#x5F0F;&#x8BC6;&#x522B;&#x3001;&#x4EBA;&#x5DE5;&#x667A;&#x80FD;&#x3001;&#x81EA;&#x63A7;&#x3001;&#x7EDF;&#x8BA1;&#x5B66;&#x3001;&#x8FD0;&#x7B79;&#x5B66;&#x3001;&#x751F;&#x7269;&#x4FE1;&#x606F;&#x3001;&#x7269;&#x7406;&#x5B66;/&#x91CF;&#x5B50;&#x8BA1;&#x7B97;&#x3001;&#x795E;&#x7ECF;&#x79D1;&#x5B66;&#x3001;&#x793E;&#x4F1A;&#x5B66;/&#x5FC3;&#x7406;&#x5B66;&#x7B49;&#x4E13;&#x4E1A;&#xFF0C;&#x56FE;&#x50CF;&#x5904;&#x7406;&#x3001;&#x6A21;&#x5F0F;&#x8BC6;&#x522B;&#x3001;&#x673A;&#x5668;&#x5B66;&#x4E60;&#x76F8;&#x5173;&#x7814;&#x7A76;&#x65B9;&#x5411;&#xFF0C;&#x672C;&#x79D1;&#x53CA;&#x4EE5;&#x4E0A;&#xFF0C;&#x535A;&#x58EB;&#x4F18;&#x5148;&#xFF1B;</li>
<li>&#x719F;&#x7EC3;&#x638C;&#x63E1;&#x8BA1;&#x7B97;&#x673A;&#x89C6;&#x89C9;&#x548C;&#x56FE;&#x50CF;&#x5904;&#x7406;&#x76F8;&#x5173;&#x7684;&#x57FA;&#x672C;&#x7B97;&#x6CD5;&#x53CA;&#x5E94;&#x7528;&#xFF1B;</li>
<li>&#x8F83;&#x5F3A;&#x7684;&#x7B97;&#x6CD5;&#x5B9E;&#x73B0;&#x80FD;&#x529B;&#xFF0C;&#x719F;&#x7EC3;&#x638C;&#x63E1; C/C++ &#x7F16;&#x7A0B;&#xFF0C;&#x719F;&#x6089; Shell/Python/Matlab &#x81F3;&#x5C11;&#x4E00;&#x79CD;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#xFF1B;</li>
<li>&#x5728;&#x8BA1;&#x7B97;&#x673A;&#x89C6;&#x89C9;&#x3001;&#x6A21;&#x5F0F;&#x8BC6;&#x522B;&#x7B49;&#x5B66;&#x672F;&#x4F1A;&#x8BAE;&#x6216;&#x8005;&#x671F;&#x520A;&#x4E0A;&#x53D1;&#x8868;&#x8BBA;&#x6587;&#x3001;&#x76F8;&#x5173;&#x56FD;&#x9645;&#x6BD4;&#x8D5B;&#x83B7;&#x5956;&#x3001;&#x53CA;&#x6709;&#x76F8;&#x5173;&#x4E13;&#x5229;&#x8005;&#x4F18;&#x5148;&#x3002;</li>
</ul>
<p><a id="review-of-brush-questions-website" href></a></p>
<h2 class="mume-header" id="%E5%A4%8D%E4%B9%A0%E5%88%B7%E9%A2%98%E7%BD%91%E7%AB%99">&#x1F4AF; &#x590D;&#x4E60;&#x5237;&#x9898;&#x7F51;&#x7AD9;</h2>

<ul>
<li><a href="http://www.cplusplus.com/">cplusplus</a></li>
<li><a href="https://zh.cppreference.com/w/%E9%A6%96%E9%A1%B5">cppreference</a></li>
<li><a href="http://www.runoob.com/cplusplus/cpp-tutorial.html">runoob</a></li>
<li><a href="https://leetcode.com/">leetcode</a> | <a href="https://leetcode-cn.com/">leetcode-cn</a></li>
<li><a href="https://www.lintcode.com/">lintcode</a></li>
<li><a href="https://www.nowcoder.net/">nowcoder</a></li>
</ul>
<p><a id="interview-questions-experience" href></a></p>
<h2 class="mume-header" id="%E9%9D%A2%E8%AF%95%E9%A2%98%E7%9B%AE%E7%BB%8F%E9%AA%8C">&#x1F4DD; &#x9762;&#x8BD5;&#x9898;&#x76EE;&#x7ECF;&#x9A8C;</h2>

<ul>
<li><a href="https://www.nowcoder.com/discuss/205497">&#x725B;&#x5BA2;&#x7F51; . 2020&#x79CB;&#x62DB;&#x9762;&#x7ECF;&#x5927;&#x6C47;&#x603B;&#xFF01;&#xFF08;&#x5C97;&#x4F4D;&#x5212;&#x5206;&#xFF09;</a></li>
<li><a href="https://www.nowcoder.com/discuss/197116">&#x725B;&#x5BA2;&#x7F51; . &#x3010;&#x5907;&#x6218;&#x79CB;&#x62DB;&#x3011;2020&#x5C4A;&#x79CB;&#x62DB;&#x5907;&#x6218;&#x653B;&#x7565;</a></li>
<li><a href="https://www.nowcoder.com/discuss/90907">&#x725B;&#x5BA2;&#x7F51; . 2019&#x6821;&#x62DB;&#x9762;&#x7ECF;&#x5927;&#x6C47;&#x603B;&#xFF01;&#x3010;&#x6BCF;&#x65E5;&#x66F4;&#x65B0;&#x4E2D;&#x3011;</a></li>
<li><a href="https://www.nowcoder.com/discuss/146655">&#x725B;&#x5BA2;&#x7F51; . 2019&#x6821;&#x62DB;&#x6280;&#x672F;&#x7C7B;&#x5C97;&#x4F4D;&#x9762;&#x7ECF;&#x6C47;&#x603B;&#x3010;&#x6280;&#x672F;&#x7C7B;&#x3011;</a></li>
<li><a href="https://www.nowcoder.com/discuss/68802">&#x725B;&#x5BA2;&#x7F51; . 2018&#x6821;&#x62DB;&#x7B14;&#x8BD5;&#x771F;&#x9898;&#x6C47;&#x603B;</a></li>
<li><a href="https://www.nowcoder.com/discuss/12805">&#x725B;&#x5BA2;&#x7F51; . 2017&#x79CB;&#x5B63;&#x6821;&#x56ED;&#x62DB;&#x8058;&#x7B14;&#x7ECF;&#x9762;&#x7ECF;&#x4E13;&#x9898;&#x6C47;&#x603B;</a></li>
<li><a href="https://www.nowcoder.com/discuss/25268">&#x725B;&#x5BA2;&#x7F51; . &#x53F2;&#x4E0A;&#x6700;&#x5168;2017&#x6625;&#x62DB;&#x9762;&#x7ECF;&#x5927;&#x5408;&#x96C6;&#xFF01;&#xFF01;</a></li>
<li><a href="https://www.nowcoder.com/discuss/57978">&#x725B;&#x5BA2;&#x7F51; . &#x9762;&#x8BD5;&#x9898;&#x5E72;&#x8D27;&#x5728;&#x6B64;</a></li>
<li><a href="https://www.zhihu.com/question/29693016">&#x77E5;&#x4E4E; . &#x4E92;&#x8054;&#x7F51;&#x6C42;&#x804C;&#x8DEF;&#x4E0A;&#xFF0C;&#x4F60;&#x89C1;&#x8FC7;&#x54EA;&#x4E9B;&#x5199;&#x5F97;&#x5F88;&#x597D;&#x3001;&#x5F88;&#x7528;&#x5FC3;&#x7684;&#x9762;&#x7ECF;&#xFF1F;&#x6700;&#x597D;&#x80FD;&#x5206;&#x4EAB;&#x81EA;&#x5DF1;&#x7684;&#x9762;&#x7ECF;&#x3001;&#x5FC3;&#x8DEF;&#x5386;&#x7A0B;&#x3002;</a></li>
<li><a href="https://www.zhihu.com/question/24964987">&#x77E5;&#x4E4E; . &#x4E92;&#x8054;&#x7F51;&#x516C;&#x53F8;&#x6700;&#x5E38;&#x89C1;&#x7684;&#x9762;&#x8BD5;&#x7B97;&#x6CD5;&#x9898;&#x6709;&#x54EA;&#x4E9B;&#xFF1F;</a></li>
<li><a href="http://blog.csdn.net/ljzcome/article/details/574158">CSDN . &#x5168;&#x9762;&#x6574;&#x7406;&#x7684;C++&#x9762;&#x8BD5;&#x9898;</a></li>
<li><a href="http://blog.csdn.net/Xiongchao99/article/details/74524807?locationNum=6&amp;fps=1">CSDN . &#x767E;&#x5EA6;&#x7814;&#x53D1;&#x7C7B;&#x9762;&#x8BD5;&#x9898;&#xFF08;C++&#x65B9;&#x5411;&#xFF09;</a></li>
<li><a href="http://blog.csdn.net/fakine/article/details/51321544">CSDN . c++&#x5E38;&#x89C1;&#x9762;&#x8BD5;&#x9898;30&#x9053;</a></li>
<li><a href="http://blog.csdn.net/onever_say_love/article/details/51223886">CSDN . &#x817E;&#x8BAF;2016&#x5B9E;&#x4E60;&#x751F;&#x9762;&#x8BD5;&#x7ECF;&#x9A8C;&#xFF08;&#x5DF2;&#x7ECF;&#x62FF;&#x5230;offer)</a></li>
<li><a href="https://www.cnblogs.com/Y1Focus/p/6707121.html">cnblogs . C++&#x9762;&#x8BD5;&#x96C6;&#x9526;( &#x9762;&#x8BD5;&#x88AB;&#x95EE;&#x5230;&#x7684;&#x95EE;&#x9898; )</a></li>
<li><a href="https://www.cnblogs.com/fangyukuan/archive/2010/09/18/1829871.html">cnblogs . C/C++ &#x7B14;&#x8BD5;&#x3001;&#x9762;&#x8BD5;&#x9898;&#x76EE;&#x5927;&#x6C47;&#x603B;</a></li>
<li><a href="https://www.cnblogs.com/LUO77/p/5771237.html">cnblogs . &#x5E38;&#x89C1;C++&#x9762;&#x8BD5;&#x9898;&#x53CA;&#x57FA;&#x672C;&#x77E5;&#x8BC6;&#x70B9;&#x603B;&#x7ED3;&#xFF08;&#x4E00;&#xFF09;</a></li>
<li><a href="https://segmentfault.com/a/1190000003745529">segmentfault . C++&#x5E38;&#x89C1;&#x9762;&#x8BD5;&#x95EE;&#x9898;&#x603B;&#x7ED3;</a></li>
</ul>
<p><a id="recruitment-time-post" href></a></p>
<h2 class="mume-header" id="%E6%8B%9B%E8%81%98%E6%97%B6%E9%97%B4%E5%B2%97%E4%BD%8D">&#x1F4C6; &#x62DB;&#x8058;&#x65F6;&#x95F4;&#x5C97;&#x4F4D;</h2>

<ul>
<li><a href="https://www.nowcoder.com/school/schedule">&#x725B;&#x5BA2;&#x7F51; . &#x540D;&#x4F01;&#x6821;&#x62DB;&#x65E5;&#x7A0B;</a></li>
</ul>
<p><a id="recommend" href></a></p>
<h2 class="mume-header" id="%E5%86%85%E6%8E%A8">&#x1F44D; &#x5185;&#x63A8;</h2>

<ul>
<li><a href="https://github.com/CyC2018/Job-Recommend">Github . CyC2018/Job-Recommend</a>&#xFF1A;&#x1F50E; &#x4E92;&#x8054;&#x7F51;&#x5185;&#x63A8;&#x4FE1;&#x606F;&#xFF08;&#x793E;&#x62DB;&#x3001;&#x6821;&#x62DB;&#x3001;&#x5B9E;&#x4E60;&#xFF09;</li>
<li><a href="https://github.com/amusi/AI-Job-Recommend">Github . amusi/AI-Job-Recommend</a>&#xFF1A;&#x56FD;&#x5185;&#x516C;&#x53F8;&#x4EBA;&#x5DE5;&#x667A;&#x80FD;&#x65B9;&#x5411;&#xFF08;&#x542B;&#x673A;&#x5668;&#x5B66;&#x4E60;&#x3001;&#x6DF1;&#x5EA6;&#x5B66;&#x4E60;&#x3001;&#x8BA1;&#x7B97;&#x673A;&#x89C6;&#x89C9;&#x548C;&#x81EA;&#x7136;&#x8BED;&#x8A00;&#x5904;&#x7406;&#xFF09;&#x5C97;&#x4F4D;&#x7684;&#x62DB;&#x8058;&#x4FE1;&#x606F;&#xFF08;&#x542B;&#x5168;&#x804C;&#x3001;&#x5B9E;&#x4E60;&#x548C;&#x6821;&#x62DB;&#xFF09;</li>
</ul>
<p><a id="contributor" href></a></p>
<h2 class="mume-header" id="%E8%B4%A1%E7%8C%AE%E8%80%85">&#x1F46C; &#x8D21;&#x732E;&#x8005;</h2>

<p><a href="https://github.com/huihut/interview/graphs/contributors"><img src="https://opencollective.com/interview/contributors.svg?button=false"></a></p>
<p><a id="support-sponsor" href></a></p>
<h2 class="mume-header" id="%E6%94%AF%E6%8C%81%E8%B5%9E%E5%8A%A9">&#x1F36D; &#x652F;&#x6301;&#x8D5E;&#x52A9;</h2>

<p><strong><a href="https://store.steampowered.com/app/1137770/Avalive/">Avalive</a></strong>&#xFF1A;&#x4E00;&#x4E2A;&#x9762;&#x90E8;&#x6355;&#x6349;&#x7684;&#x865A;&#x62DF;&#x5F62;&#x8C61;&#x626E;&#x6F14;&#x8F6F;&#x4EF6;&#x3002;</p>
<p><a id="license" href></a></p>
<h2 class="mume-header" id="license">&#x1F4DC; License</h2>

<p>&#x672C;&#x4ED3;&#x5E93;&#x9075;&#x5FAA; CC BY-NC-SA 4.0&#xFF08;&#x7F72;&#x540D; - &#x975E;&#x5546;&#x4E1A;&#x6027;&#x4F7F;&#x7528; - &#x76F8;&#x540C;&#x65B9;&#x5F0F;&#x5171;&#x4EAB;&#xFF09; &#x534F;&#x8BAE;&#xFF0C;&#x8F6C;&#x8F7D;&#x8BF7;&#x6CE8;&#x660E;&#x51FA;&#x5904;&#xFF0C;&#x4E0D;&#x5F97;&#x7528;&#x4E8E;&#x5546;&#x4E1A;&#x76EE;&#x7684;&#x3002;</p>
<p><a href="https://github.com/huihut/interview/blob/master/LICENSE"><img src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" alt="CC BY-NC-SA 4.0"></a></p>

      </div>
      
      
    
    
    
    
    
    
    
    
  
    </body></html>